python基礎(chǔ)教程之獲取本機(jī)ip數(shù)據(jù)包示例
這幾天用到了raw socket,用python寫了些demo程序,這里記錄下。
首先我們看一個(gè)簡(jiǎn)單的sniffer程序:
#! /usr/bin/python
# code for linux
import socket
#s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
print s.recvfrom(65535)
這里直接用raw socket接收數(shù)據(jù),直接print操作。這個(gè)就幾行代碼,也沒什么好解釋的了,不懂的google下。
得到IP數(shù)據(jù)包后,接下來的工作就是對(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é)):
def decodeIpHeader(packet):
mapRet = {}
mapRet["version"] = (int(ord(packet[0])) & 0xF0)>>4
mapRet["headerLen"] = (int(ord(packet[0])) & 0x0F)<<2
mapRet["serviceType"] = hex(int(ord(packet[1])))
mapRet["totalLen"] = (int(ord(packet[2])<<8))+(int(ord(packet[3])))
mapRet["identification"] = (int( ord(packet[4])>>8 )) + (int( ord(packet[5])))
mapRet["id"] = int(ord(packet[6]) & 0xE0)>>5
mapRet["fragOff"] = int(ord(packet[6]) & 0x1F)<<8 + int(ord(packet[7]))
mapRet["ttl"] = int(ord(packet[8]))
mapRet["protocol"] = int(ord(packet[9]))
mapRet["checkSum"] = int(ord(packet[10])<<8)+int(ord(packet[11]))
mapRet["srcaddr"] = "%d.%d.%d.%d" % (int(ord(packet[12])),int(ord(packet[13])),int(ord(packet[14])), int(ord(packet[15])))
mapRet["dstaddr"] = "%d.%d.%d.%d" % (int(ord(packet[16])),int(ord(packet[17])),int(ord(packet[18])), int(ord(packet[19])))
return mapRet
調(diào)用代碼:
proto = socket.getprotobyname('tcp') # only tcp
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, proto)
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 ""
相關(guān)文章
用python結(jié)合jieba和wordcloud實(shí)現(xiàn)詞云效果
詞云,顧名思義就是很多個(gè)單詞,然后通過出現(xiàn)的頻率或者比重之類的標(biāo)準(zhǔn)匯聚成一個(gè)云朵的樣子嘛,其實(shí)呢現(xiàn)在網(wǎng)上已經(jīng)有很多能自動(dòng)生成詞云的工具了,比如Wordle,Tagxedo等等,Python也能實(shí)現(xiàn)這樣的效果,我們通過jieba庫和wordcloud庫也能十分輕松的完成詞云的構(gòu)建2017-09-09Python基礎(chǔ)知識(shí)方法重寫+文件處理+異常處理
這篇文章主要介紹了Python基礎(chǔ)知識(shí)方法重寫+文件處理+異常處理,這是基礎(chǔ)知識(shí)分享的第四篇,看到這里了相信大家前幾篇都學(xué)得還不錯(cuò)吧,下面我們繼續(xù)鞏固Python基礎(chǔ)知識(shí),需要的朋友也可以參考一下2022-05-05python中property屬性的介紹及其應(yīng)用詳解
這篇文章主要介紹了python中property屬性的介紹及其應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08使用python將圖片按標(biāo)簽分入不同文件夾的方法
今天小編就為大家分享一篇使用python將圖片按標(biāo)簽分入不同文件夾的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12python實(shí)現(xiàn)決策樹ID3算法的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)決策樹ID3算法的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05Python使用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包
dpkt項(xiàng)目是一個(gè)Python模塊,主要用于對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析和操作,z這篇文章主要為大家介紹了python如何利用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包,有需要的可以參考下2023-10-10