Python寫安全小工具之TCP全連接端口掃描器
前言:
通過端口掃描我們可以知道目標主機都開放瞭哪些服務,下面通過TCP connect來實現一個TCP全連接端口掃描器。
一個簡單的端口掃描器
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * def portScanner(host,port): try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) print('[+] %d open' % port) s.close() except: print('[-] %d close' % port) def main(): setdefaulttimeout(1) for p in range(1,1024): portScanner('192.168.0.100',p) if __name__ == '__main__': main()
說明:
- 原理:對不同端口進行TCP連接,根據是否連接成功來判斷端口是否打開
- AF_INET指定使用IPv4協議,SOCK_STREAM指定使用面向流的TCP協議
- connect((host, port)),向指定的IP:端口發起連接
- setdefaulttimeout(1),默認超時時間為1秒
多線程版本
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * import threading lock = threading.Lock() openNum = 0 threads = [] def portScanner(host,port): global openNum try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) lock.acquire() openNum+=1 print('[+] %d open' % port) lock.release() s.close() except: pass def main(): setdefaulttimeout(1) for p in range(1,1024): t = threading.Thread(target=portScanner,args=('192.168.0.100',p)) threads.append(t) t.start() for t in threads: t.join() print('[*] The scan is complete!') print('[*] A total of %d open port ' % (openNum)) if __name__ == '__main__': main()
說明:
- 使用多線程,1、t = threading.Thread() 2、t.start() 3、t.join()
- 多線程要保證線程安全(共享變量的一致性)就要對處理共享變量的代碼段加鎖
到此這篇關於Python寫安全小工具之TCP全連接端口掃描器的文章就介紹到這瞭,更多相關Python TCP端口掃描器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python實現端口掃描器的示例代碼
- Python實現UDP與TCP通信的示例詳解
- Python 基於TCP 傳輸協議的網絡通信實現方法
- 利用Python腳本寫端口掃描器socket,python-nmap
- python實現套接字創建