導航:首頁 > 凈水問答 > libpcap過濾語法

libpcap過濾語法

發布時間:2022-01-17 04:28:58

A. Linux下如何抓指定IP的包

用tcpm命令可以抓指定IP的包,具體命令為:

tcpmp tcp -i eth1 -t -s 0 -c 100 and dst port 22 and src net 192.168.1.1 -w ./target.cap

參數解析:

tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型。

-i eth1 : 只抓經過介面eth1的包

-t : 不顯示時間戳

-s 0 : 抓取數據包時默認抓取長度為68位元組。加上-S 0 後可以抓到完整的數據包

-c 100 : 只抓取100個數據包

dst port 22 : 抓取目標埠是22的數據包

src net 192.168.1.0/24 : 數據包的源網路地址為192.168.1.1

-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

(1)libpcap過濾語法擴展閱讀

tcpmp語法格式:

tcpmp [-adeflnNOpqStvx][-c<數據包數目>][-dd][-ddd][-F<表達文件>][-i<網路界面>][-r<數據包文件>][-s<數據包大小>][-tt][-T<數據包類型>][-vv][-w<數據包文件>][輸出數據欄位]

tcpmp主要參數說明:

1、-a 嘗試將網路和廣播地址轉換成名稱。

2、-c<數據包數目> 收到指定的數據包數目後,就停止進行傾倒操作。

3、-d 把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標准輸出。

4、-dd 把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標准輸出。

5、-ddd 把編譯過的數據包編碼轉換成十進制數字的格式,並傾倒到標准輸出。

6、-e 在每列傾倒資料上顯示連接層級的文件頭。

7、-f 用數字顯示網際網路地址。

8、-F<表達文件> 指定內含表達方式的文件。

9、-i<網路界面> 使用指定的網路截面送出數據包。

10、-l 使用標准輸出列的緩沖區。

11、-n 不把主機的網路地址轉換成名字。

12、-N 不列出域名。

B. 怎麼關閉掉wireshark的register.c的自動生成

centos下安裝wireshark相當簡單.兩條命令就夠了.這里.主要是記錄寫使用方面的東西安裝:1、yuminstallwireshark。注意這樣並無法使用wireshark命令和圖形界面。但提供了抓包基本功能。2、yuminstallwireshark-gnome。這樣就可以方便的使用了。如果能登錄圖形界面終端.那使用和windows下的無區別.但我們的伺服器都在國外.要管理的話都是SSH登錄只能用命令行了。使用wireshark的命令行工具tshark,在安裝的時候會默認給安裝上的,使用方法很簡單,要捕捉包:tshark-wpacket.txt-ietho-q這樣就會把捕捉到的網路包存放在packet.txt文件裡面,要查看詳情的話:tshark-rpacket.txt-x-V|more即可.下面理一下所有參數的作用:-a設置一個標准用來指定Wireshark什麼時候停止捕捉文件。標準的格式為test:value,test值為下面中的一個。ration:value當捕捉持續描述超過Value值,停止寫入捕捉文件。filesize:value當捕捉文件大小達到Value值kilobytes(kilobytes表示1000bytes,而不是1024bytes),停止寫入捕捉文件。如果該選項和-b選項同時使用,Wireshark在達到指定文件大小時會停止寫入當前捕捉文件,並切換到下一個文件。files:value當文件數達到Value值時停止寫入捕捉文件-b如果指定捕捉文件最大尺寸,因為Wireshark運行在」ringbuffer」模式,被指定了文件數。在」ringbuffer」模式下,Wireshark會寫到多個捕捉文件。它們的名字由文件數和創建日期,時間決定。當第一個捕捉文件被寫滿,Wireshark會跳轉到下一個文件寫入,直到寫滿最後一個文件,此時Wireshark會丟棄第一個文件的數據(除非將files設置為0,如果設置為0,將沒有文件數限制),將數據寫入該文件。如果ration選項被指定,當捕捉持續時間達到指定值的秒數,Wireshark同樣會切換到下個文件,即使文件未被寫滿。ration:value當捕捉持續描述超過Value值,即使文件未被寫滿,也會切換到下個文件繼續寫入。filesize:value當文件大小達到value值kilobytes時(kelobyte表示1000bytes,而不是1024bytes),切換到下一個文件。files:value當文件數達到value值時,從第一個文件重新開始寫入。-B僅適合Win32:設置文件緩沖大小(單位是MB,默認是1MB).被捕捉驅動用來緩沖包數據,直到達到緩沖大小才寫入磁碟。如果捕捉時碰到丟包現象,可以嘗試增大它的大小。-c實時捕捉中指定捕捉包的最大數目,它通常在連接詞-k選項中使用。-D列印可以被Wireshark用於捕捉的介面列表。每個介面都有一個編號和名稱(可能緊跟在介面描述之後?)會被列印,介面名或介面編號可以提供給-i參數來指定進行捕捉的介面(這里列印應該是說在屏幕上列印)。在那些沒有命令可以顯示列表的平台(例如Windows,或者缺少ifconfig-a命令的UNIX平台)這個命令很有用;介面編號在Windows2000及後續平台的介面名稱通常是一些復雜字元串,這時使用介面編號會更方便點。注意,」可以被Wireshark用於捕捉」意思是說:Wireshark可以打開那個設備進行實時捕捉;如果在你的平台進行網路捕捉需要使用有特殊許可權的帳號(例如root,Windows下的Administrators組),在沒有這些許可權的賬戶下添加-D不會顯示任何介面。參數-f設置捕捉時的內置過濾表達式-g在使用-r參數讀取捕捉文件以後,使用該參數跳轉到指定編號的包。-h-h選項請求Wireshark列印該版本的命令使用方法(前面顯示的),然後退出。-i設置用於進行捕捉的介面或管道。網路介面名稱必須匹配Wireshark-D中的一個;也可以使用Wireshark-D顯示的編號,如果你使用UNIX,netstat-i或者ifconfig-a獲得的介面名也可以被使用。但不是所有的UNIX平台都支持-a,ifconfig參數。如果未指定參數,Wireshark會搜索介面列表,選擇第一個非環回介面進行捕捉,如果沒有非環回介面,會選擇第一個環回介面。如果沒有介面,wireshark會報告錯誤,不執行捕捉操作。管道名即可以是FIFO(已命名管道),也可以使用」-」讀取標准輸入。從管道讀取的數據必須是標準的libpcap格式。-k-k選項指定Wireshark立即開始捕捉。這個選項需要和-i參數配合使用來指定捕捉產生在哪個介面的包。-l打開自動滾屏選項,在捕捉時有新數據進入,會自動翻動」Packetlist」面板(同-S參數一樣)。-m設置顯示時的字體(編者認為應該添加字體範例)-n顯示網路對象名字解析(例如TCP,UDP埠名,主機名)。-N對特定類型的地址和埠號打開名字解析功能;該參數是一個字元串,使用m可以開啟MAC地址解析,n開啟網路地址解析,t開啟傳輸層埠號解析。這些字元串在-n和-N參數同時存在時優先順序高於-n,字母C開啟同時(非同步)DNS查詢。-o設置首選項或當前值,覆蓋默認值或其他從Preference/recentfile讀取的參數、文件。該參數的值是一個字元串,形式為prefname:value,prefnmae是首選項的選項名稱(出現在preference/recentfile上的名稱)。value是首選項參數對應的值。多個-o可以使用在單獨命中中。設置單獨首選項的例子:wireshark-omgcp.display_dissect_tree:TRUE設置多個首選項參數的例子:wireshark-omgcp.display_dissect_tree:TRUE-omgcp.udp.callagent_port:2627-p不將介面設置為雜收模式。注意可能因為某些原因依然出於雜收模式;這樣,-p不能確定介面是否僅捕捉自己發送或接受的包以及到該地址的廣播包,多播包-Q禁止Wireshark在捕捉完成時退出。它可以和-c選項一起使用。他們必須在出現在-i-w連接詞中。-r指定要讀取顯示的文件名。捕捉文件必須是Wireshark支持的格式。-R指定在文件讀取後應用的過濾。過濾語法使用的是顯示過濾的語法,,不匹配的包不會被顯示。-s設置捕捉包時的快照長度。Wireshark屆時僅捕捉每個包位元組的數據。-SWireshark在捕捉數據後立即顯示它們,通過在一個進程捕捉數據,另一個進程顯示數據。這和捕捉選項對話框中的」Updatelistofpacketsinrealtime/實時顯示數據」功能相同。-t設置顯示時間戳格式。可用的格式有r相對的,設置所有包時間戳顯示為相對於第一個包的時間。aabsolute,設置所有包顯示為絕對時間。ad絕對日期,設置所有包顯示為絕對日期時間。ddelta設置時間戳顯示為相對於前一個包的時間eepoch設置時間戳顯示為從epoch起的妙數(1970年1月1日00:00:00起)-v請求Wireshark列印出版本信息,然後退出-w在保存文件時以savefile所填的字元為文件名。-y如果捕捉時帶有-k參數,-y將指定捕捉包中數據鏈接類型。Thevaluesreportedby-Larethevaluesthatcanbeused.-X設置一個選項傳送給TShark模塊。eXtension選項使用extension_key:值形式,extension_key:可以是:lua_script:lua_script_filename,它告訴Wireshark載入指定的腳本。默認腳本是Luascripts.-z得到Wireshark的多種類型的統計信息,顯示結果在實時更新的窗口。用LogParser分析WireShark的包

C. 通過libpcap編寫抓包的程序中,怎麼再抓到的包中再次提取有針對某一個IP或者MAC地址的包 匹配應該怎麼寫啊

設置過濾器,即設置哪些是你想要的東西,哪些是你不想要的,具體怎麼設置你看看libpcap,好久不用忘了。網路位元組序和主機位元組序,就是高位先存,還是低位先存的問題,

D. Linux 下libpcap和Windows下winpcap 捕獲網路數據包的異同

其實介面都差不多幾乎一致,數據包哪來的異同,不都是從分組過濾器那兒弄來的么

E. libpcap 怎麼攔截數據包

可以用iptables 程序實現攔截

F. 如何用libpcap解析協議類型

/* * printPkt()函數是列印經過指定網卡的和指定類型的數據包; * 參數device:指定要監聽的網卡數據名稱; * 參數pname:指定列印時的content名稱; * 參數flag:是否為混雜模式,1為混雜模式,0為非混雜模式; * 參數flt:是否打開過濾,1為打開過濾,0為...

G. tcpmp 協議過濾哪些協議

tcpmp 協議過濾
作為業界標準的捕獲工具,tcpmp提供了強大而又靈活的包過濾功回能。作為tcpmp基礎答的libpcap包捕獲引擎支持標準的包過濾規則,如基於5重包頭的過濾(如基於源/目的IP地址/埠和IP協議類型)。

tcpmp/libpcap的包過濾規則也支持更多通用分組表達式,在這些表達式中,包中的任意位元組范圍都可以使用關系或二進制操作符進行檢查。對於位元組范圍表達,你可以使用以下格式:
proto [ expr : size ]

「proto」可以是熟知的協議之一(如ip,arp,tcp,udp,icmp,ipv6),「expr」表示與指定的協議頭開頭相關的位元組偏移量。有我們熟知的直接偏移量如tcpflags,也有取值常量如tcp-syn,tcp-ack或者tcp-fin。「size」是可選的,表示從位元組偏移量開始檢查的位元組數量。
使用這種格式,你可以像下面這樣過濾TCP SYN,ACK或FIN包。

H. 如何使用tcpmp來捕獲TCP SYN,ACK和FIN包

作為業界標準的捕獲工具,tcpmp提供了強大而又靈活的包過濾功能。作為tcpmp基礎的libpcap包捕獲引擎支持標準的包過濾規則,如基於5重包頭的過濾(如基於源/目的IP地址/埠和IP協議類型)。Linux網路十分有用的兩個命令ip和TcpDump/Linux/2014-02/96993.htmtcpmp/libpcap的包過濾規則也支持通用分組表達式,在這些表達式中,包中的任意位元組范圍都可以使用關系或二進制操作符進行檢查。對於位元組范圍表達,你可以使用以下格式:proto[expr:size]「proto」可以是熟知的協議之一(如ip,arp,tcp,udp,icmp,ipv6),「expr」表示與指定的協議頭開頭相關的位元組偏移量。有我們熟知的直接偏移量如tcpflags,也有取值常量如tcp-syn,tcp-ack或者tcp-fin。「size」是可選的,表示從位元組偏移量開始檢查的位元組數量。使用這種格式,你可以像下面這樣過濾TCPSYN,ACK或FIN包。只捕獲TCPSYN包:#tcpmp-i"tcp[tcpflags]&(tcp-syn)!=0"只捕獲TCPACK包:#tcpmp-i"tcp[tcpflags]&(tcp-ack)!=0"只捕獲TCPFIN包:#tcpmp-i"tcp[tcpflags]&(tcp-fin)!=0"之捕獲TCPSYN或ACK包:#tcpmp-r"tcp[tcpflags]&(tcp-syn|tcp-ack)!=0"

I. 基於libpcap,NDIS,raw socket,socket的網路封包截獲技術各有什麼特點

1。libpcap是linux下的版本,應用層。 NDIS是物理層。raw sokcet 傳輸層,普通的socket 工作在應用層。2。幾乎osi模型的所有協議,選擇過濾條件。3.wireshark.4。可以。

J. 如何利用libpcap和Python嗅探數據包

一提到Python獲取數據包的方式,相信很多Python愛好者會利用Linux的libpcap軟體包或利用Windows下的WinPcap可移植版的方式進行抓取數據包,然後再利用dpkt軟體包進行協議分析,我們這里想換一個角度去思考:
1. Python版本的pcap存儲內存數據過小,也就是說緩存不夠,在高並發下容易發生丟包現象,其實C版本的也同樣存在這樣的問題,只不過Python版本的緩存實在是過低,讓人很郁悶。
2. dpkt協議分析並非必須,如果你對RFC 791和RFC 793等協議熟悉的話,完全可以使用struct.unpack的方式進行分析。
如果你平常習慣使用tcpmp抓取數據包的話,完全可以使用它來代替pcap軟體包,只不過我們需要利用tcpmp將抓取的數據以pcap格式進行保存,說道這里大家一定會想到Wireshark工具,具體命令如下:
tcpmp dst 10.13.202.116 and tcp dst port 80 -s 0 -i eth1 -w ../pcap/tcpmp.pcap -C 1k -W 5
我們首先需要對pcap文件格式有所了解,具體信息大家可以參考其他資料文檔,我這里只說其重要的結構體組成,如下:
sturct pcap_file_header
{
DWORD magic;
WORD version_major;
WORD version_minor;
DWORD thiszone;
DWORD sigfigs;
DWORD snaplen;
DWORD linktype;
}
struct pcap_pkthdr
{
struct timeval ts;
DWORD caplen;
DWORD len;
}
struct timeval
{
DWORD GMTtime;
DWORD microTime;
}
這里需要說明的一點是,因為在Python的世界裡一切都是對象,所以往往Python在處理數據包的時候感覺讓人比較麻煩。Python提供了幾個libpcapbind,http://monkey.org/~gsong/pypcap/這里有 一個最簡單的。在windows平台上,你需要先安裝winpcap,如果你已經安裝了Ethereal非常好用。一個規范的抓包過程:
import pcap
import dpkt
pc=pcap.pcap() #注,參數可為網卡名,如eth0
pc.setfilter('tcp port 80') #設置監聽過濾器
for ptime,pdata in pc: #ptime為收到時間,pdata為收到數據
print ptime,pdata #...
對抓到的乙太網V2數據包(raw packet)進行解包:
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
if p.data.data.__class__.__name__=='TCP':
if data.dport==80:
print p.data.data.data
一些顯示參數nrecv,ndrop,nifdrop=pc.stats()返回的元組中,第一個參數為接收到的數據包,第二個參數為被核心丟棄的數據包。
至於對於如何監控tcpmp生成的pcap文件數據,大家可以通過pyinotify軟體包來實現,如下:
class Packer(pyinotify.ProcessEvent):
def __init__(self, proct):
self.proct = proct
self.process = None
def process_IN_CREATE(self, event):
logger.debug("create file: %s in queue" % self.process_IF_START_THREAD(event))
def process_IN_MODIFY(self, event):
self.process_IF_START_THREAD(event)
logger.debug("modify file: %s in queue" % self.process_IF_START_THREAD(event))
def process_IN_DELETE(self, event):
filename = os.path.join(event.path, event.name)
logger.debug("delete file: %s" % filename)
def process_IF_START_THREAD(self, event):
filename = os.path.join(event.path, event.name)
if filename != self.process:
self.process = filename
self.proct.put(filename)
if self.proct.qsize() > 1:
try:
logger.debug("create consumer proct.qsize: %s" % self.proct.qsize())
consumer = Consumer(self.proct)
consumer.start()
except Exception, errmsg:
logger.error("create consumer failed: %s" % errmsg)
return filename
class Factory(object):
def __init__(self, proct):
self.proct = proct
self.manager = pyinotify.WatchManager()
self.mask = pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY
def work(self):
try:
try:
notifier = pyinotify.ThreadedNotifier(self.manager, Packer(self.proct))
notifier.start()
self.manager.add_watch("../pcap", self.mask, rec = True)
notifier.join()
except Exception, errmsg:
logger.error("create notifier failed: %s" % errmsg)
except KeyboardInterrupt, errmsg:
logger.error("factory has been terminated: %s" % errmsg)
在獲得要分析的pcap文件數據之後,就要對其分析了,只要你足夠了解pcap文件格式就可以了,對於我們來講只需要獲得TCP數據段的數據即可,如下:
class Writer(threading.Thread):
def __init__(self, proct, stack):
threading.Thread.__init__(self)
self.proct = proct
self.stack = stack
self.pcap_pkthdr = {}
def run(self):
while True:
filename = self.proct.get()
try:
f = open(filename, "rb")
readlines = f.read()
f.close()
offset = 24
while len(readlines) > offset:
self.pcap_pkthdr["len"] = readlines[offset+12:offset+16]
try:
length = struct.unpack("I", self.pcap_pkthdr["len"])[0]
self.stack.put(readlines[offset+16:offset+16+length])
offset += length + 16
except Exception, errmsg:
logger.error("unpack pcap_pkthdr failed: %s" % errmsg)
except IOError, errmsg:
logger.error("open file failed: %s" % errmsg)
在獲得TCP數據段的數據包之後,問題就簡單多了,根據大家的具體需求就可以進行相應的分析了,我這里是想分析其HTTP協議數據,同樣也藉助了dpkt軟體包進行分析,如下:
def worker(memcache, packet, local_address, remote_address):
try:
p = dpkt.ethernet.Ethernet(packet)
if p.data.__class__.__name__ == "IP":
srcip = "%d.%d.%d.%d" % tuple(map(ord, list(p.data.src)))
dstip = "%d.%d.%d.%d" % tuple(map(ord, list(p.data.dst)))
if p.data.data.__class__.__name__ == "TCP":
tcpacket = p.data.data
if tcpacket.dport == 80 and dstip == local_address:
srcport = tcpacket.sport
key = srcip + ":" + str(srcport)
if tcpacket.data:
if not memcache.has_key(key):
memcache[key] = {}
if not memcache[key].has_key("response"):
memcache[key]["response"] = None
if memcache[key].has_key("data"):
memcache[key]["data"] += tcpacket.data
else:
memcache[key]["data"] = tcpacket.data
else:
if memcache.has_key(key):
memcache[key]["response"] = dpkt.http.Request(memcache[key]["data"])
try:
stackless.tasklet(connection)(memcache[key]["response"], local_address, remote_address)
stackless.run()
except Exception, errmsg:
logger.error("connect remote remote_address failed: %s", errmsg)
logger.debug("old headers(none content-length): %s", memcache[key]["response"])
memcache.pop(key)
except Exception, errmsg:
logger.error("dpkt.ethernet.Ethernet failed in worker: %s", errmsg)
如果大家只是想單純的獲取IP地址、埠、流量信息,那麼問題就更簡單了,這里只是拋磚引玉。另外再提供一段代碼供參考:
import pcap, dpkt, struct
import binascii
def main():
a = pcap.pcap()
a.setfilter('udp portrange 4000-4050')
try:
for i,pdata in a:
p=dpkt.ethernet.Ethernet(pdata)
src='%d.%d.%d.%d' % tuple(map(ord,list(p.data.src)))
dst='%d.%d.%d.%d' % tuple(map(ord,list(p.data.dst)))
sport = p.data.data.sport
dport = p.data.data.dport
qq = int( binascii.hexlify(p.data.data.data[7:11]) , 16 )
print 'QQ: %d, From: %s:%d , To: %s:%d' % (qq,src,sport,dst,dport)
except Exception,e:
print '%s' % e
n = raw_input()
if __name__ == '__main__':
main()

閱讀全文

與libpcap過濾語法相關的資料

熱點內容
廢水中鉛分析國標法 瀏覽:832
中空纖維超濾膜技術參數 瀏覽:608
車內空調濾芯如何更換 瀏覽:709
難降解廢水含哪些東西 瀏覽:696
小污水泵一小時抽多少水 瀏覽:389
格蘭富提升泵拆機 瀏覽:215
PBT加纖可以回用嗎 瀏覽:496
九牧花灑除垢方法 瀏覽:796
空氣凈化器劃分等級什麼意思 瀏覽:228
工廠不要亂排放廢水什麼意思 瀏覽:644
什麼叫污水提升器 瀏覽:384
半透膜滲透壓計算公式 瀏覽:937
反滲透式清水器 瀏覽:416
上海行藝y型過濾器34 瀏覽:81
dnf韓械計算器傷害提升多少 瀏覽:422
壁掛式的空調濾芯怎麼拆開 瀏覽:872
蒸餾與萃取教學的反思 瀏覽:938
iam凈化器怎麼清洗 瀏覽:261
鎢礦尾砂污水處理多少錢一噸 瀏覽:213
污水處理廠再生水回用 瀏覽:468