標籤:平台 class 建立 set 通訊端 code == host 目標
嗅探工具的主要目標是基於UDP發現目標網路中的存活主機,選擇UDP的原因是UDP訪問過程開銷小。
由於很多的作業系統在處理UDP連接埠的閉合時都會存在一個共性,我們也正是利用這個共性來開展確定此IP上是否有存活主機。
當我們發送一個資料包給主機上的一個以關閉的UDP介面時,如果此介面返回一個ICMP的話,就表示目標主機存活,如果無返回,說明目標主機不存在 。
#coding = utf-8import osimport socket#目標主機,視情況而定host = "192.168.1.1 ""#建立原始通訊端,然後綁定在公開介面上if os.name == "nt": socket_protocol = socket.IPPROTO_IPelse: socket_protocol = socket.IPPROTO_ICMPsniffer = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket_protocol)sniffer.bind((host,0))#設定在捕獲的I資料包中包含IP頭sniffer.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)#在windos平台上,需要設定IOCTL以啟用會混雜模式if os.name == "nt": sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON) #讀取單個資料包print(sniffer.recvfrom(65565))#然後關閉混雜模式if os.name == "nt": sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)
IOCTL(輸入輸出控制):是使用者隔離模式下與核心模式下組件進行通訊的方式的組件進行通訊的方式.
混雜模式:是指一台機器能夠接收所有經過它的資料流,而不論其目的地址是否是他。可供管理員進行網路診斷,在這裡我們利用其特性.
通過python開發一個小嗅探工具