用C寫的乙個掃瞄器原始碼

2021-06-15 18:32:39 字數 3681 閱讀 4184

#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...