這幾天用到了raw socket,用python寫(xiě)了些demo程序,這里記錄下。
首先我們看一個(gè)簡(jiǎn)單的sniffer程序:
這里直接用raw socket接收數(shù)據(jù),直接print操作。這個(gè)就幾行代碼,也沒(méi)什么好解釋的了,不懂的google下。
得到IP數(shù)據(jù)包后,接下來(lái)的工作就是對(duì)IP頭進(jìn)行解析,在這之前,我們先看看RFC中是怎么定義的(RFC791 : http://www.ietf.org/rfc/rfc791.txt ):
即對(duì)應(yīng)的圖:
從RFC和上圖中可以看到IP數(shù)據(jù)包頭各個(gè)字段所占的位數(shù),我們可以根據(jù)這些定義去解析IP數(shù)據(jù)包頭,然后根據(jù)相應(yīng)的策略處理數(shù)據(jù)。
這里給出一段用python實(shí)現(xiàn)的解析IP頭的代碼(呵呵,是demo中的代碼,只解析了前20個(gè)字節(jié)):
調(diào)用代碼:
while True:
packet = sock.recvfrom(65535)[0]
if len(packet) == 0:
sck.close()
else:
#print str(packet)
mapIpTmp = decodeIpHeader(packet)
for k,v in mapIpTmp.items():
print k,"/t:/t",v
print ""
新聞熱點(diǎn)
疑難解答
圖片精選