导航:首页 > 净水问答 > 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过滤语法相关的资料

热点内容
施特劳斯智饮机滤芯是什么 浏览:631
污水处理产业扶持政策有哪些 浏览:811
锦鲤鱼池过滤泵流量 浏览:711
超滤器是什么意思 浏览:881
纯水静静怎么打 浏览:846
超滤截COD 浏览:914
电子超纯水水罐用什么材质 浏览:49
清除水垢硅磷晶 浏览:519
crv空气净化器怎么打开 浏览:526
反渗透膜低温清洗 浏览:785
郑州过滤王管理中心地址 浏览:872
水水垢成分 浏览:866
陕西原装外置污水提升泵要多少钱 浏览:419
聚聚乙烯树脂粉袋 浏览:739
饮水机漏水属于什么原因 浏览:824
污水厂硝化脱模怎么处理 浏览:924
vue2内置过滤器 浏览:386
植物芳香油蒸馏设备 浏览:418
聚醚枫超滤膜进水pH 浏览:907
外置过滤桶推荐 浏览:676