socket实现端口扫描
作者:admin 日期:2011-07-20
搞过黑客的童鞋可能对扫描器应该都不陌生了,基本的端口扫描器,就是用来检测某个主机的一个或一系列端口的打开情况,给出结果。
下面,我就用socket制作一个简易的端口扫描器。
#include <stdio.h>
#include <winsock.h>
#pragma comment(lib,"WS2_32.lib")
void Init();
int PortScan(char* ip,int startport,int endport);
bool CheckPort(char* ip, int port);
SOCKET g_s;
int main()
{
Init();
if(CheckPort("127.0.0.1",80))
{
printf("Open");
}
else
{
printf("Close");
}
getchar();
return 0;
}
void Init()
{
WSAData da;
WSAStartup(MAKEWORD(2,2),&da);
g_s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
}
int PortScan(char* ip,int startport,int endport)
{
return 0;
}
bool CheckPortEx(sockaddr_in* addr)
{
if(connect(g_s,(sockaddr*)addr,sizeof(sockaddr_in))==0)
{
return true;
}
else
{
return false;
}
}
bool CheckPort(char* ip, int port)
{
sockaddr_in addr;
ZeroMemory(&addr,sizeof(sockaddr_in));
addr.sin_addr.S_un.S_addr=inet_addr(ip);
addr.sin_port=htons(port);
addr.sin_family=AF_INET;
return CheckPortEx(&addr);
}
代码很简单,简单到我觉得都没有解释的必要。基本的端口扫描功能已经实现了。而且如果你注意看会发现这段代码在编写的时候已经考虑到扩展的问题。所以如果你要扫描多个端口,扫描多个ip,采用多线程,都是会很容易改的。