-- 作者:錐子 -- 發布時間:2005-1-16 22:21:00-- 三、編寫一個簡單的連接埠掃描程式: /********************************************/ /* 連接埠掃描器 原始碼 */ /* PortScanner.cpp */ /********************************************/ #include <stdio.h> #include <string.h> #include <winsock.h> int main(int argc, char *argv[]) { int mysocket; int pcount = 0; struct sockaddr_in my_addr; WSADATA wsaData; WORD wVersionRequested=MAKEWORD(1,1); if(argc < 3) { printf("usage: %s <host> <maxport>//n", argv[0]); exit(1); } if (WSAStartup(wVersionRequested , &wsaData)){ printf("Winsock Initialization failed.//n"); exit(1); } for(int i=1; i < atoi(argv[2]); i++){ if((mysocket = socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET){ printf("Socket Error"); exit(1); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(i); my_addr.sin_addr.s_addr = inet_addr(argv[1]); if(connect(mysocket, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == SOCKET_ERROR) closesocket(mysocket); else{ pcount++; printf("Port %d - open//n", i); }} printf("%d ports open on host - %s//n", pcount, argv[1]); closesocket(mysocket); WSACleanup(); return 0; } 這個程式使用Borland C++編譯,程式中關鍵代碼是“my_addr.sin_port = htons(i)”,因為變數i是一個迴圈量,它從一開始到使用者設定值結束,而htons(i)則是對串連遠程伺服器需要使用的連接埠進行定義,之後使用connect()函數串連指定連接埠,通過傳回值判斷這個連接埠是否開啟,這樣一個連接埠掃描的思路就出現了。 程式中用到的socket函數庫是專門實現網路連接的一套綜合函數庫,這套函數內容豐富,在各種流行程式設計語言中都有,駭客在學習了C語言和socket函數庫以後,便可以快速掌握各種程式設計語言、並能夠編寫出相當數量的駭客工具。 |