c语言[源码][扫描器]端口扫描器
Page 1 of 1
c语言[源码][扫描器]端口扫描器
#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;
}
#include
#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
- Posts : 211
Points : 72655
Reputation : 0
Join date : 2014-06-18
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|