您的位置:首页 > 编程语言 > C语言/C++

C++实现端口扫描

2013-11-04 23:11 656 查看
代码如下(看不懂的留言哦):

#include
#include
using namespace std;

#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD wVersion = MAKEWORD(2,0);
WSADATA wsaData;

struct sockaddr_in sin; //socket信息。

int iFromPort;  //起始端口号
int iToPort;    //截至端口号
int iNowPort;   //正在处理的端口号

char cHost[20]; //IP
SOCKET s;
int iOpenPort;  //统计开放的端口个数 。
iOpenPort = 0;
char choose;    //是否存储到文件中。
FILE *tp;

cout<<"请输入待检测IP:";
cin>>cHost;
cout<<"请输入起始端口号:";
cin>>iFromPort;
cout<<"请输入截至端口号:";
cin>>iToPort;

cout<<"是否把扫描结果保存到文件(y/n):";
cin>>choose;

if(choose == 'y')
{
tp = fopen("Out.txt","w+");
fprintf(tp,"IP:%s      扫描结果如下:\n",cHost);
}

if(iFromPort > iToPort || iFromPort < 0 || iFromPort >65535 || iToPort <0 || iToPort >65535)
{
printf("端口号输入错误!\n");
return 0;
}

if (WSAStartup(wVersion , &wsaData))
{
printf("初始化失败!\n");
return -1;
}

printf("======= 开始扫描 ======= \n");
for(iNowPort = iFromPort; iNowPort <= iToPort; iNowPort++)
{
s = socket(AF_INET,SOCK_STREAM,0);
if(s == INVALID_SOCKET)
{
printf("创建socket()失败! \n");
WSACleanup();
}

sin.sin_family = AF_INET;
sin.sin_port = htons(iNowPort);
sin.sin_addr.S_un.S_addr = inet_addr(cHost);

if(connect(s,(struct sockaddr*)&sin,sizeof(sin)) == SOCKET_ERROR)
{
printf("%s -> %d:未开放 \n",cHost,iNowPort);
closesocket(s);
}
else
{
if(choose == 'y')
{
fprintf(tp,"端口:%d     开放\n",iNowPort);
}
printf("%s -> %d:开放 \n",cHost,iNowPort);
iOpenPort ++;
closesocket(s);
}
}

printf("======= 扫描结果 ======= \n");
printf("主机:%s 扫描到%d个端口开放\n",cHost,iOpenPort);
if(choose == 'y')
{
fclose(tp);
}
closesocket(s);
WSACleanup();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: