Bootstrap

pcap_open 和 pcap_open_live

pcap_t* pcap_open	
(	const char * 	source,
	int 	snaplen,
	int 	flags,
	int 	read_timeout,
	struct pcap_rmtauth * 	auth,
	char * 	errbuf	 
)	

打开一个通用源,以便捕获/发送(仅限WinPcap)流量。

该pcap_open()替换所有pcap_open_xxx()与一个单一的通话功能。

该函数隐藏不同的pcap_open_xxx()函数之间的差异,以便程序员无需管理不同的打开功能。

该函数可以依靠pcap_createsrcstr()创建根据新语法保留捕获设备的字符串,另一方面是pcap_parsesrcstr()。


参数介绍
source:以/0终止的字符串,其中包含要打开的源名称。为了使源语法更容易,请记住:
              1.pcap_findalldevs_ex()返回的适配器可以由pcap_open()立即使用,
              2.如果用户想要将自己的源字符串传递给pcap_open(),则pcap_createsrcstr()有助于创建正确的源标识符。

snaplen: 必须保留的包的长度。对于由过滤器接收的每个数据包,只有第一个“snaplen”字节存储在缓冲区中并传递给用户应用程序。例如,snaplen等于100表示只存储每个数据包的前100个字节。

flags:   保留捕获数据包可能需要的几个标志。允许的标志在pcap_open()标志中定义。

read_timeout: 以毫秒为单位读取超时。读取超时用于安排在看到数据包时读取不一定立即返回,但是在一次操作中,它会等待一段时间来允许更多数据包到达并从操作系统内核读取多个数据包。并非所有平台都支持读取超时; 在没有的平台上,读取超时被忽略。

auth: 指向“结构pcap_rmtauth”的指针,它保留在远程机器上验证用户所需的信息。如果这不是远程捕获,则该指针可以设置为NULL。

errbuf: 指向用户分配的缓冲区的指针,该缓冲区将在该函数失败的情况下包含错误。

返回值:

指向'pcap_t'的指针,可以用作以下调用(pcap_compile()等)的参数,并指定打开的WinPcap会话。如果出现问题,它返回NULL,'errbuf'变量保留错误消息。


警告:

源不能大于PCAP_BUF_SIZE。
以下格式不允许为“源”字符串:
rpcap:// [打开第一个本地适配器]
rpcap:// hostname / [打开第一个远程适配器]


pcap_t* pcap_open_live	
(	const char * 	device,
	int 	snaplen,
	int 	promisc,
	int 	to_ms,
	char * 	ebuf	 
)			

从网络打开实时捕获。

pcap_open_live()用于获取数据包捕获描述符以查看网络上的数据包。

device是指定要打开的网络设备的字符串; 在具有2.2或更高版本内核的Linux系统上,可以使用“any”或NULL的设备参数来捕获来自所有接口的数据包。

snaplen指定要捕获的最大字节数。如果该值小于捕获的数据包的大小,则该数据包的第一个snaplen字节将被捕获并作为数据包数据提供。在大多数(如果不是全部)网络中,值65535应该足以捕获数据包中可用的所有数据。

promisc指定是否将接口置于混杂模式。(注意,即使这个参数是假的,接口也可能在混杂模式下出于某些其他原因。)现在,这不适用于“任何”设备; 如果提供了“any”或NULL的参数,则将忽略promisc标志。

to_ms指定读取超时(以毫秒为单位)。读取超时用于安排在看到数据包时读取不一定立即返回,但是在一次操作中,等待一段时间才能允许更多数据包到达并从操作系统内核读取多个数据包。

并非所有平台都支持读取超时; 在没有的平台上,读取超时被忽略。对于支持读取超时的平台,to_ms的零值将导致读取永远等待,以允许足够的数据包到达,没有超时。errbuf用于返回错误或警告文本。

当pcap_open_live()失败并返回NULL时,它将被设置为错误文本。

当pcap_open_live()成功时,errbuf也可能设置为警告文本; 为了检测这种情况,调用者在调用pcap_open_live()之前应该在errbuf中存储一个零长度的字符串,并且如果errbuf不再是零长度字符串,则向用户显示警告。


;