python調(diào)用tcpdump抓包過(guò)濾的方法
本文實(shí)例為大家分享了python調(diào)用tcpdump抓包過(guò)濾的具體代碼,供大家參考,具體內(nèi)容如下
之前在linux用python腳本寫(xiě)一個(gè)抓包分析小工具,實(shí)在不想用什么libpcap、pypcap所以,簡(jiǎn)單來(lái)了個(gè)tcpdump加grep搞定。基本思路是分別起tcpdump和grep兩個(gè)進(jìn)程,進(jìn)程直接通過(guò)pipe交換數(shù)據(jù),簡(jiǎn)單代碼如下:
#! /usr/bin/python def tcpdump(): import subprocess, fcntl, os # sudo tcpdump -i eth0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*" cmd1 = ['tcpdump', '-i', 'eth0', '-n','-B', '4096','-s', '0', '-w', '-'] cmd2 = ['grep', '--line-buffered', '-a', '-o', '-E', 'Host: .*|GET /.*'] p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE) p2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stdin=p1.stdout) flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL) fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL, (flags | os.O_NDELAY | os.O_NONBLOCK)) return p2 def poll_tcpdump(proc): #print 'poll_tcpdump....' import select txt = None while True: # wait 1/10 second readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1) if not len(readReady): break try: for line in iter(proc.stdout.readline, ""): if txt is None: txt = '' txt += line except IOError: print 'data empty...' pass break return txt proc = tcpdump() while True: text = poll_tcpdump(proc) if text: print '>>>> ' + text
運(yùn)行效果:

其中值得注意tcpdump中'-B', '4096'這個(gè)參數(shù),官方文檔貌似沒(méi)有明確提及,但是它是你解決丟包的關(guān)鍵地方之一,當(dāng)然還有-s這個(gè)參數(shù)也得好好利用!其他的大家可以自由發(fā)揮!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用random.shuffle()隨機(jī)打亂字典排序
本文主要介紹了Python使用random.shuffle()隨機(jī)打亂字典排序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
python繪制風(fēng)場(chǎng)方向和大小quiver問(wèn)題
這篇文章主要介紹了python繪制風(fēng)場(chǎng)方向和大小quiver問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Windows下PyCharm配置Anaconda環(huán)境(超詳細(xì)教程)
這篇文章主要介紹了Windows下PyCharm配置Anaconda環(huán)境,本文給大家分享一篇超詳細(xì)教程,通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
python3.12.7降級(jí)到3.10.0的方法步驟
本文主要介紹了python3.12.7降級(jí)到3.10.0的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
Python簡(jiǎn)單實(shí)現(xiàn)兩個(gè)任意字符串乘積的方法示例
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)兩個(gè)任意字符串乘積的方法,結(jié)合實(shí)例形式分析了Python針對(duì)字符串、列表的切片、轉(zhuǎn)換、遍歷等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
Python字符串的encode與decode研究心得亂碼問(wèn)題解決方法
為什么Python使用過(guò)程中會(huì)出現(xiàn)各式各樣的亂碼問(wèn)題,明明是中文字符卻顯示成“\xe4\xb8\xad\xe6\x96\x87”的形式?2009-03-03

