libpcap动态链接库在linux下使用以及接口函数

来源:互联网 发布:graphic软件 编辑:程序博客网 时间:2024/06/06 01:18

Libpcap动态链接库的linux使用:

设置环境:
Linux下 IP地址:192.168.1.1 广播地址:192.168.1.255 子网掩码:255.255.255.0
可以使用下面命令进行设置:
Sudo ifconfig eth0 192.168.10 broadcast 192.168.1.255 netmask 255.255.255.0

源码安装:
1. 解压缩 tar -zxvf 包名
2. ./configure
3. Make
4. Sudo make install
函数接口详解:

 Char *pcap_lookupdev(char *errbuf)

这个函数返回第一个合适的网络接口的字符串指针,如果出错,则errbuf存放出错的信息的字符串,errbuf至少应该是PCAP_ERRBUF_SIZE个字节长度。
注意:很多libpcap函数都有这个参数。
Pcap_lookdev()一般可以在跨平台的,且各个平台上的网络接口名称都不相同的情况下使用。
如果我们手动指定要监听的网络接口,则这一步骤跳过,我们在第二步中将要监听的网络接口字符串硬编码在pcap_open_live里。

2.释放网路接口
Void pcap_close(pcap_t *p);
该函数用于关闭pcap_open_live()获取的pcap_t的网络接口对象并释放相关资源。

3.获取网络接口后,我们需要打开它
Pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf);
这个函数会返回指定接口的pcap_t类型的指针,后面的所有操作都要使用这个指针。

第一个参数: 是第一步获取的网络接口字符串,可以直接使用硬编码。
第二个参数: 对于每个数据包,从开头要抓多少个字节,我们可以设置这个值来只抓每个数据包的头部,而不关心具体的内容。
第三个参数: 指定是否打开混杂模式,0表示非混杂模式,其他任何值表示混合模式。如果要打开混杂模式,那么网卡必须也要打开混杂模式,可以使用如下命令打开混杂eth0的混杂模式:
Ifconfig eth0 promisc
第四个参数:指定需要等待的毫秒数,超过这个数值之后,第三步获取数据包的这几个函数就会立即返回。0表示一直等待知道有数据包到来。
第五个参数: 是存放出错信息的数组。

4.获取数据包
打开网络接口后就已经开始监听了,如何知道收到数据包呢?
以下三种方法:
1. U_char *pcap_next(pcap_t *p,struct pcap_pkthdr *h);
如果返回值是NULL,表示没有抓到包
第一个参数:是第二步返回的pcap_t 类型的指针。
第二个参数:是保存收到的第一个数据包的pcap_pkthdr类型的指针

Struct pcap_pkthdr
{
Struct timeval ts; /time stamp/
Bpf_u_int32 caplen; /length of protion present/
Bpf_u_int32 len; /length this packet/
};
注意:这个函数只要收到一个数据包就立刻返回。

2 、int pcap_loop(pcap_t * p, int cnt, pcap_handler callback, u_char * user)
第一个参数是第2步返回的pcap_t类型的指针
第二个参数是需要抓的数据包的个数,一旦抓到了cnt个数据包,pcap_loop立即返回。 负数的cnt表示pcap_loop永远循环抓包,直到出现错误。
第三个参数是一个回调函数指针,它必须是如下的形式:
void callback(u_char * userarg, const struct pcap_pkthdr * pkthdr, const u_char * packet)
第一个参数是pcap_loop的最后一个参数,当收到足够数量的包后pcap_loop会调用 callback回调函数,同时将pcap_loop()的user参数传递给它
第二个参数是收到的数据包的pcap_pkthdr类型的指针
第三个参数是收到的数据包数据。

3、int pcap_dispatch(pcap_t * p, int cnt, pcap_handler callback, u_char * user)
这个函数和pcap_loop()非常类似,只是在超过to_ms毫秒后就会返回(to_ms是 pcap_open_live()的第4个参数)。

0 0
原创粉丝点击