- 论坛徽章:
- 0
|
本帖最后由 YY_ICECOLD 于 2015-05-16 12:05 编辑
我自己写了一个抓包程序,使用原始套接字抓取链路层的报文,绑定的接口是eth0,现在我想同时抓eth1的包,想问一下两个接口绑定在同一个套接字上可以吗?
我自己写了测试程序,发现可以同时抓到eth0和eth1的ICMP包,但是在网上找不到相关资料,不知道这样写是否有问题?
代码如下:- if ((sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP)))<0) {
- perror("socket");
- exit(1);
- }
- #if 1
- //set tpacket hdr version.
- if (-1 == setsockopt (sock, SOL_PACKET, PACKET_VERSION, &tpacket_version, sizeof (int)))
- {
- fprintf (stderr, "set tpacket version failure: %s.\n", strerror (errno));
- goto close_sock;
- }
- #endif
- /* bind to device. */
- if (-1 == setsockopt (sock, SOL_SOCKET, SO_BINDTODEVICE, dev, strlen(dev) + 1))
- {
- fprintf (stderr, "bind to %s failure: %s.\n", dev, strerror (errno));
- exit(1);
- }
- /* bind to device. */
- if (-1 == setsockopt (sock, SOL_SOCKET, SO_BINDTODEVICE, "eth1", strlen("eth1") + 1))
- {
- fprintf (stderr, "bind to %s failure: %s.\n", "eth1", strerror (errno));
- exit(1);
- }
复制代码 |
|