简单的端口扫描器(TCP connect)
端口掃描器原理相對簡單,采用的是TCP connect狀態判斷。具體來說:TCP connect方式使用系統網絡API connect向目標主機的端口發起連接,如果無法連接,說明該端口關閉。該方式掃描速度比較慢,而且由于建立完整的TCP連接會在目標機上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮選擇的方式。
在編寫過程中,采用多線程時遇到共享變量訪問的同步問題,經過試驗,這里僅僅簡單采用Sleep()函數進行等待就能擁有不錯的效果。
代碼及部分說明如下:
#include <stdio.h>
#include <WinSock2.h>
#include <time.h>
#pragma comment(lib,"ws2_32.lib")
int gNumThread = 0;
void usage()
{
printf("Usage: <TCPScanner> [IP]
[StartPort]-[EndPort]
");
printf("Example: TCPScanner 192.168.1.1 80-100
");
ExitProcess(1);
}
DWORD WINAPI ThreadProc(LPVOID pPara);
int main(int argc, char *argv[])
{
WSADATA wsad;
SOCKADDR_IN target;
char *IP,*p;
USHORT
PortEnd,PortStart,i;
clock_t TimeStart,TimeEnd;
HANDLE hThread;
DWORD dwThreadId;
//參數處理
if(argc!=3) usage();
IP = argv[1]; //第一個參數是IP
PortStart = atoi(argv[2]); //第二個參數是端口范圍,分別得到首尾端口
for(p = argv[2];*(p++)!='-';); //指向結束端口的起始位置
PortEnd =
atoi(p);
printf("Scanner will work on %s %d-%d now..
",IP,PortStart,PortEnd);
TimeStart =
clock();
//加載,創建套接字,填寫目標主機地址,按端口掃描
WSAStartup(MAKEWORD(2,2),&wsad);
target.sin_family
= AF_INET;
target.sin_addr.s_addr = inet_addr(IP);
for(i=PortStart;i<=PortEnd;++i){
target.sin_port
= htons(i);
//創建進程接收數據
hThread =
CreateThread(NULL,0,ThreadProc,(LPVOID)&target,0,&dwThreadId);
Sleep(10); //主進程先等待一段時間,使得子進程能夠有時間來讀取端口信息,不致跳過、錯開某些端口
if (hThread == NULL){
printf("CreateThread() failed: %d
", GetLastError());
break;
}
CloseHandle(hThread);
//不再需要這個句柄,關掉它,但并非是關掉對應線程
}
Sleep(50); //等待上一段時間,等待所有子進程結束任務
TimeEnd =
clock();
printf("Time cost:%.3fs
",(float)(TimeEnd-TimeStart)/CLOCKS_PER_SEC);
WSACleanup();
return 0;
}
DWORD WINAPI ThreadProc(LPVOID pParam)
{
SOCKADDR_IN target = *(SOCKADDR_IN*) pParam;
SOCKET sConn;
printf("%s %d
",inet_ntoa(target.sin_addr),ntohs(target.sin_port));
sConn = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if(connect(sConn,(const SOCKADDR*) &target,sizeof(target)) == SOCKET_ERROR) return 0;
printf("Port %d is open
",ntohs(target.sin_port));
closesocket(sConn);
return 0;
}
總結
以上是生活随笔為你收集整理的简单的端口扫描器(TCP connect)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 14赶不上了 台积电3nm
- 下一篇: 高端成了!吉利全新SUV官图发布:8分像