python端口扫描
生活随笔
收集整理的這篇文章主要介紹了
python端口扫描
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- python網絡編程
- socket函數
- 服務器端套接字函數
- 客戶端套接字函數
- 公共用途套接字
- C/S架構實踐
- 編寫端口掃描器
- 多線程端口掃描2.0
python網絡編程
- socket又稱“套接字”,應用程序通常通過“套接字”向網絡發出請求或者應答請求。使主機間或者一臺計算機上的進程間可以通訊。
C/S架構:
socket函數
- socket()函數創建套接字,語法:socket.socket([family[,type[,proto]]])
- family:套接字家族可以為AF_UNIX(本機內進程間)或者AF_INET(主機與主機間通信)
- type:套接字類型可以根據面向鏈接還是非鏈接分為SOCK_STREAM或SOCK_DGRAM
- protocol:協議,一般不填
服務器端套接字函數
- s.bind()綁定地址(host,port)到套接字(傳入的參數為元組)
- s.listen()開始tcp監聽
- s.accept()被動接收tcp客戶端鏈接
客戶端套接字函數
- s.connect() 主動初始化tcp服務器鏈接
- s.connect_ex()上個函數的擴展版本,出錯返回錯誤碼而不是報異常
公共用途套接字
可能看到這里都很懵,看看實際代碼吧
C/S架構實踐
0.0.0.0代表所有網卡,死循環表示一直接收客戶端請求
寫一個客戶端請求:
# encoding:utf-8import socket c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_host = '127.0.0.1' server_port = 8888 c.connect((server_host,server_port)) print c.recv(1024) c.close()這種網頁只能實現服務器向客戶端發送信息,如果是雙向發送,在客戶端加send()函數在服務器端加recv()函數
編寫端口掃描器
前面我寫了編寫目錄掃描工具,有興趣的可以康康
首先,如何判斷端口是否開放。直接請求該端口,connect_ex請求錯誤時會返回ture
一個套接字只能connect一次,因為掃描要修改套接字的端口。所以創建套接字和close要放在循環內。
#!/usr/bin/python # encoding:utf-8import socket import sysports = (1,65535) host = sys.argv[1]#接收命令行傳入的urlfor port in ports:c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()現在就是65535個端口全掃啦,一個迷你namp就這十幾行代碼,但它還是有點慢,下面加入多線程
多線程端口掃描2.0
#!/usr/bin/python # encoding:utf-8import socket import sys import threading import queuedef scan():while not q.empty():port = q.get()c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()if __name__=="__main__":host = sys.argv[1]thread_num = sys.argv[2]q = queue.Queue()for port in range(1,65535):q.put(port)for i in range(int(thread_num))t = threading.Thread(target=scan)t.start()t.join()#子線程全部運行完了結束進程,以免線程卡死if name == ‘main’:的作用
一個python文件通常有兩種使用方法,第一是作為腳本直接執行,第二是 import 到其他的 python 腳本中被調用(模塊重用)執行。因此 if name == ‘main’: 的作用就是控制這兩種情況執行代碼的過程,在 if name == ‘main’: 下的代碼只有在第一種情況下(即文件作為腳本直接執行)才會被執行,而 import 到其他腳本中是不會被執行的。
總結
以上是生活随笔為你收集整理的python端口扫描的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flash动画制作实例教程
- 下一篇: 黑客x档案