// 編譯時需使用的庫
#pragma comment(lib,"wsock32.lib")
// select()成員定義
#define zero (fd_set *)0
// 變數定義
int maxth, scanok, scannum,i;
int portip, hoststart, hoststop, startport, endport;
long searchnum, searched;
void usage(char *); // 定義顯示使用方法函式
void playx(int); // 定義狀態提示函式
void setip2(char *); // 定義設定ip函式
void customport(char *, char *, char *); // 定義自定義掃瞄埠函式
void portscannow(int); // 定義埠掃瞄掃瞄
// 主程式
int main(int argc, char *argv)
// 檢測是否為port掃瞄
if(!(stricmp(strlwr(argv[1]), "-p") == 0))
// 程式初始化
if (wsastartup(makeword(1,1), &wsadata) != 0)
// 埠掃瞄引數轉換
// 如果引數為三個
if (argc == 3)
// 如果引數為四個
else
if (argc == 4)
// 引數過多顯示幫助
else
// 掃瞄埠開始
portscannow(argc);
wsacleanup();
return 0;
} // 幫助提示函式
void usage(char * prog)
// 進度提示
void playx(int play = 0)
; if (searchnum != 0) }
else }
// 設定ip
void setip2(char *cp)
else
// 給控制要掃瞄ip段的變數賦值
memcpy(&host, testhost->h_addr, 4);
hoststop = hoststart = ntohl(host);
} }
// 測試執行緒是否已滿
void testthread(int thread = 200)
return;
} // 等待執行緒結束函式
void waitthreadend()
else break;
} printf("/r/n");
return;
} // 定製埠掃瞄引數定義
void customport(char *cp, char *cp2, char *cp3)
// 埠大小判斷
if (startport < 0 || startport > 65536 || endport < 0 || endport > 65535)
// 處理ip位址
setip2(cp3);
} // 埠掃瞄函式
uint portscan(lpvoid port)
// 給sock成員賦值
server.sin_family=af_inet;
server.sin_addr.s_addr = htonl(addr); // 要掃瞄的位址
server.sin_port = htons(short(port)); // 要掃瞄的埠
// 顯示進度
playx();
// 呼叫ioctlsocket()設定套接字為非阻塞模式
if (ioctlsocket(sock, fionbio, &flag) != 0)
// 呼叫connect()連線遠端主機埠
connect(sock, (struct sockaddr*)&server, sizeof(server));
timeout.tv_sec = 18; // 超時限制為18秒
timeout.tv_usec = 0;
fd_zero(&mask); // 清空集合mask
fd_set(sock, &mask); // 將sock放入集合mask中
// 用select() 處理掃瞄結果
switch(select(sock + 1, zero, &mask, zero, &timeout))
// sock超時處理
case 0:
default:
if(fd_isset(sock, &mask)) }
return 0;
} // 掃瞄開始主函式
void portscannow(int xp)
; // 顯示掃瞄開始的時間
timenow = _strtime(timebuf);
printf("/r/nportscan start time: %s/r/n/n",timenow);
// 計數器初始化.
maxth = 0;
scanok = 0;
scannum = 0;
searched = 0;
// 計算要掃瞄的埠數量
searchnum = hoststop - hoststart +1;
if(xp == 3)
searchnum = searchnum * 32;
if(xp == 4)
searchnum = searchnum * (endport - startport +1);
// 埠掃瞄開始
for (portip = hoststart; portip <= hoststop; portip ++, scannum ++)
if(i > 11) i = 0;
// 預設埠掃瞄
// scan 192.168.0.1
// scan 192.168.0.1-192.168.0.254
if (xp == 3)
} // 自定義埠掃瞄
// scan -p 21 192.168.0.1
// scan -p 21-80 192.168.0.1-192.168.0.254
if (xp == 4) }
else }
} }
// 等待所有的執行緒結束
waitthreadend();
// 顯示埠掃瞄結束時間
timenow = _strtime(timebuf);
printf("/r/nportscan end time: %s", timenow);
printf("/r/nscan %d hosts completed. open %d ports!/r/n", scannum, scanok);
}
TCPing 埠掃瞄工具
描述在本地主機和遠端主機之間,tcping可以測試出執行tcp三次握手所需的時間 syn,syn ack,ack 最終ack傳送時間不包括在內,只有最少的時間才能將其丟棄在近端的電線。概要 tcping tdsvf46 i interval n times w interval b n r time...
C 很久以前寫的埠掃瞄工具
using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system.window...
Qt編寫埠掃瞄工具
qt提供了qtcpsocket類,可以方便地建立tcp連線。利用這一功能,maxiee編寫了乙個簡單地埠掃瞄工具。軟體的功能就是,掃瞄某一網段的固定埠,如80埠,若目的位址開放了這一埠,那麼連線就能建立。通過waitforconnected 方法,我們就能得知是否連線成功,若成功,我們在輸出中加以標...