Evo. G Tech Team Forum
Welcome to Evo. G Tech Team Forum. We have moved to a new website : www.evogtechteam.com

Thanks you.

by Evo. G Tech Team Management.

Join the forum, it's quick and easy

Evo. G Tech Team Forum
Welcome to Evo. G Tech Team Forum. We have moved to a new website : www.evogtechteam.com

Thanks you.

by Evo. G Tech Team Management.
Evo. G Tech Team Forum
Would you like to react to this message? Create an account in a few clicks or log in to continue.

c语言[源码][扫描器]端口扫描器

Go down

c语言[源码][扫描器]端口扫描器 Empty c语言[源码][扫描器]端口扫描器

Post by cyjian December 13th 2014, 09:56

#include                                 /*包含头文件 stdio.h,  当要用基本的输入输出语句(如printf,scanf)时必须要用这个头文件*/
#include         /*包含头文件winsock.h,当调用Dos命令的时候就要用到windows.h这个头文件*/
#pragma comment(lib,"ws2_32.lib")
#define NETWORK_ERROR -1                        /*宏,定义NETWORK_ERROR的值为 -1,方便以后替换*/
#define NETWORK_OK 0                                /*宏,定义NETWORK_OK的值为 0*/
#define PORT_MIN 1                                /*宏,定义PORT_MIN的值为1*/
#define PORT_MAX 65535                                /*宏,定义PORT_MAX 的值为65535*/
HANDLE hThread;                                        /**/
DWORD hID;                                        /*定义hid为双字类型   4个字节*/
char hostname[30];                                /*定义一个有30个元素的字符型数组hostname*/
                                                //初始化
int starting_port = 0;                                /*定义一个整型变量并赋值0*/
int ending_port = 0;                                /*定义一个整型变量并赋值0*/
int nopen = 0;                                        /*定义一个整型变量并赋值0*/
DWORD portscan();                                /**/
int main(){                                        /*主函数*/
int ret;                                        /*定义一个整型变量ret*/
WSADATA dat;                                        /*WSADATA是Winsock的一个数据结构,然后定义dat为这种结构*/
WORD version;                                        /*定义version为双字类型   4个字节*/
version = MAKEWORD(2,2);                        /**/
ret = WSAStartup(version,&dat);                        /**/
if(ret != 0){                                        /*判断ret是否为0*/
printf("Error initializing Winsock.\n");        /*输出Error initializing Winsock.并换行*/
WSACleanup();                                        /*调用函数WSACleanup*/
return NETWORK_ERROR;                                /*NETWORK_ERROR返回NETWORK_ERROR  ,即宏定义的-1*/
}
if(ret == 0){                                        //if条件判断语句,如果ret==0成立,就执行{}里面的语句
printf("Enter hostname:");                        /*输出Enter hostname:*/
scanf("%s",hostname);                                /*输入hostname的值*/
printf("Enter starting port:");                        /*输出Enter starting port:*/
scanf("%d",&starting_port);                        /*输入starting_port的值*/

if(starting_port < PORT_MIN){                        /*判断starting_port与PORT_MIN的大小)*/
printf("Invalid port number.\n");                /*如果starting_port < PORT_MIN)就输出Invalid port number.*/
WSACleanup();                                        /*调用函数WSACleanup*/
return NETWORK_ERROR;                                /*返回NETWORK_ERROR的值-1*/
}
printf("Enter ending port:");                        /*输出Enter ending port*/
scanf("%d",&ending_port);                        /*输入ending_port的值*/

if(ending_port > PORT_MAX){                        /*判断ending_port 与PORT_MAX的大小*/
printf("Invalid port number.\n");                /*输出Invalid port number.*/
WSACleanup();                                        /*调用函数WSACleanup()*/
return NETWORK_ERROR;                                /*返回 NETWORK_ERROR-1*/
}
printf("\nScanning [%s]...\n",hostname);        /*输出hostname的值*/
hThread = CreateThread(0,0,(LPTHREAD_START_ROUTINE)portscan,0,0,&hID);        /**/
if(hThread == 0){                                /*判断是否hThread == 0*/
printf("Failed to create thread.\n");                /*输出Failed to create thread.*/
WSACleanup();                                        /*调用WSACleanup()*/
return NETWORK_ERROR;                                /*返回NETWORK_ERROR-1*/
}
Sleep(-1);                                        /*调用函数sleep(),并带参数-1*/
}
WSACleanup();                                        /*调用函数WSACleanup()*/
return NETWORK_OK;                                /*返回NETWORK_OK的值0*/
}
DWORD portscan(){                                /*定义portscan为双字类型   4个字节*/
int i,nret;                                        /*定义i,nret为整型变量*/
SOCKET thesocket;                                /*定义thesocket为一个指向内部数据结构的指针*/
LPHOSTENT hostent;                                /**/
thesocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);        /**/
hostent = gethostbyname((hostname));                        /**/
for(i = starting_port;i < ending_port+1;++i){                /*for循环语句,i的初始值是starting_port的值,循环条件是i < ending_port+1,++i表示每循环一次i的值就加1,并且在执行时是先加1在代入运算/
SOCKADDR_IN hostinfo;/**/
        sockaddr_in hostinfo;
hostinfo.sin_family = AF_INET;                                /**/
hostinfo.sin_addr=*((LPIN_ADDR)*hostent->h_addr_list);        /**/
hostinfo.sin_port = htons(i);                                /**/
nret = connect(thesocket,(LPSOCKADDR)&hostinfo,sizeof(hostinfo));        /**/
if(nret == 0){                                                /**/
printf("\n\t%d\n",i);                                        /*以整型的形式输出i*/
++nopen;                                                /**/
}
}
printf("\nScan complete.\n\n");                                /*输出Scan complete.*/
printf("Number of ports opened = %d\n",nopen);                /**/
closesocket(thesocket);                /**/
return 0;
}

cyjian
Spammer
Spammer

Posts : 211
Points : 72655
Reputation : 0
Join date : 2014-06-18

Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum