当前位置: 技术问答>linux和unix
linux下,如何用c语言实现捕获特定源,目的ip数据包
来源: 互联网 发布时间:2016-02-15
本文导语: 小弟在linux下用c语言实现了信息抓包,可以得到数据信息,但由于特殊要求,只希望得到源ip地址发到 目的ip地址之间的数据信息,以便测试,捕获的数据包信息是否有遗漏。望高手门多多指点! | ...
小弟在linux下用c语言实现了信息抓包,可以得到数据信息,但由于特殊要求,只希望得到源ip地址发到 目的ip地址之间的数据信息,以便测试,捕获的数据包信息是否有遗漏。望高手门多多指点!
|
等高手.
|
呵呵,写个小东西,对局域网内所有机器发广播消息,通知他们你这台机器是网关
所有数据都会经过你这台机器,想看啥东西都有
所有数据都会经过你这台机器,想看啥东西都有
|
应该是要在程序中对源和目的 ip或mac地址进行设置!接受想要的,就filtered 哈哈
|
用libpcap
|
如果你用libpcap库抓包的话,可以使用它的BPF过滤机制。
需要创建一个struct bpf_program的变量,使用pcap_compile()函数对其进行编译,然后使用pcap_setfilter()设置过滤,就可以只抓自己想要的数据包。
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
//对fp进行编译。其中str为编译过滤字符串,即过滤规则,netmask是要被过滤的子网掩码,这个参数只在检查IPV4广播地址时使用。optimize表明是否被优化。
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)//将过滤器fp设置到p上
需要创建一个struct bpf_program的变量,使用pcap_compile()函数对其进行编译,然后使用pcap_setfilter()设置过滤,就可以只抓自己想要的数据包。
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
//对fp进行编译。其中str为编译过滤字符串,即过滤规则,netmask是要被过滤的子网掩码,这个参数只在检查IPV4广播地址时使用。optimize表明是否被优化。
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)//将过滤器fp设置到p上