#include
#include
// 編譯時需使用的庫
#pragma comment(lib,"wsock32.lib")
// select()成員定義
#define zero (fd_set *)0
// 變數定義
int maxth, scanok, scannum;
int portip, hoststart, hoststop, startport, endport; //定義了開始i和結束p位址,開始和結束埠
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);
}
Scanner掃瞄器的原始碼
include include include define iport 80 目標web server埠 define szsign 500 13 r nserver microsoft iis 5.0 根據此標誌來檢查目標是否有漏洞 pragma comment lib,ws2 32.lib 定...
構建乙個快速的掃瞄器
最近工作需要做大規模的掃瞄,需要自己根據指紋寫乙個掃瞄引擎,其中碰到了無數的坑,最後勉強算的過去,特地寫寫部落格總結一下各種坑和思路。一開始自然而然想到的就是這個掃瞄模型,利用python中的同步佇列結合多執行緒發包 收包 寫操作。大致模型如下 class worker thread def ini...
用python實現乙個埠掃瞄器
最簡單的埠掃瞄工具使用tcp連線掃瞄的方式,即利用作業系統原生的網路功能,且通常作為syn掃瞄的替代選項。nmap將這種模式稱為連線掃瞄,因為使用了類似unix系統的connect 命令。如果該埠是開放的,作業系統就能完成tcp三次握手,然後埠掃瞄工具會立即關閉剛建立的該連線,防止拒絕服務攻擊。us...