原始套接字多播

梅根B

我有绑定到eth2的原始套接字。

#define DEVICE_NAME "eth2"

// open a socket
int Socket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

if (Socket < 0)
{
    perror("socket() error");
    return -1;
}

// create a interface request structure
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));     

// set the interface name
strncpy(ifr.ifr_name, DEVICE_NAME, IFNAMSIZ); 

// get interface index
ioctl(Socket, SIOCGIFINDEX, &ifr);
int Socket_Index = ifr.ifr_ifindex;

// bind the socket to the interface
struct sockaddr_ll Socket_Addr;
Socket_Addr.sll_family = AF_PACKET;
Socket_Addr.sll_protocol = htons(ETH_P_ALL);
Socket_Addr.sll_ifindex = Socket_Index;
bind(Socket, (struct sockaddr *)&Socket_Addr, sizeof(Socket_Addr)); 

// add multicast addresses to the socket, based on Unit Number

struct packet_mreq mreq;
mreq.mr_ifindex = Socket_Index;
mreq.mr_type = PACKET_MR_MULTICAST;
mreq.mr_alen = ETH_ALEN; 

memcpy(mreq.mr_address, Addresses[UNITS_1_2], ETH_ALEN);
setsockopt(Socket, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

memcpy(mreq.mr_address, Addresses[UNIT_3], ETH_ALEN);
setsockopt(Socket, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

地址[UNITS_1_2]解析为03:00:00:01:04:00,地址[UNIT_3]解析为02:00:00:01:04:01。

套接字仅接收多播数据包,而不接收单播数据包。在调试时,我启动了tcpdump,然后低调地进入混杂模式就可以了。

我的问题是:是否可以在不使用混杂模式的情况下在同一原始套接字上同时接收多播和单播数据包?我尝试使用maddr将02:00:00:01:04:01添加到eth0s mac地址中,但是没有运气。

乌韦·克莱因·克尼格

从gabhijit偷偷摸摸:尝试添加

Socket_Addr.sll_pkttype = PACKET_HOST | PACKET_MULTICAST;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UDP套接字(多播)未接收数据(Ubuntu)

来自分类Dev

Windows 7上的多播套接字问题

来自分类Dev

Python原始多播

来自分类Dev

在Golang中,如何接收套接字绑定到特定地址/端口的多播数据包?

来自分类Dev

在Linux上使用AF_LOCAL或AF_UNIX套接字进行多播吗?

来自分类Dev

如何使用Unity多播UDP套接字改善数据同步

来自分类Dev

有关UDP套接字VLAN单播/多播的问题

来自分类Dev

在C ++中的同一套接字上接收单播和多播

来自分类Dev

使用同一套接字发送和接收UDP多播数据包

来自分类Dev

在Linux的同一套接字上接收来自不同组的多播数据

来自分类Dev

Java在同一主机和端口上的同一组中的多个多播套接字

来自分类Dev

在 Ad-hoc 网络中使用多播套接字产量:[Errno 19] 没有这样的设备

来自分类Dev

带有原始套接字的python套接字setsockopt

来自分类Dev

Python:在OSX中使用原始套接字

来自分类Dev

原始套接字未收到icmp响应

来自分类Dev

Golang的原始套接字嗅探

来自分类Dev

使用原始套接字的ping请求失败

来自分类Dev

Linux内核中原始套接字的工作

来自分类Dev

在原始套接字中连接功能?

来自分类Dev

您可以在一个套接字接收调用中获得两个数据包以进行多播吗?

来自分类Dev

PHP多连接套接字(广播问题)

来自分类Dev

是否有到原始套接字的安全接口?

来自分类Dev

原始套接字中的TCP数据包-Centos 6.6

来自分类Dev

如何在Python中从套接字读取原始字节?

来自分类Dev

原始以太网套接字填充sockaddr_ll

来自分类Dev

通过原始套接字发送源MAC和IP

来自分类Dev

如何解决Windows 7下的“原始套接字限制”?

来自分类Dev

python原始套接字使用的服务器主机

来自分类Dev

Python中的QDISC_BYPASS(原始套接字)

Related 相关文章

  1. 1

    UDP套接字(多播)未接收数据(Ubuntu)

  2. 2

    Windows 7上的多播套接字问题

  3. 3

    Python原始多播

  4. 4

    在Golang中,如何接收套接字绑定到特定地址/端口的多播数据包?

  5. 5

    在Linux上使用AF_LOCAL或AF_UNIX套接字进行多播吗?

  6. 6

    如何使用Unity多播UDP套接字改善数据同步

  7. 7

    有关UDP套接字VLAN单播/多播的问题

  8. 8

    在C ++中的同一套接字上接收单播和多播

  9. 9

    使用同一套接字发送和接收UDP多播数据包

  10. 10

    在Linux的同一套接字上接收来自不同组的多播数据

  11. 11

    Java在同一主机和端口上的同一组中的多个多播套接字

  12. 12

    在 Ad-hoc 网络中使用多播套接字产量:[Errno 19] 没有这样的设备

  13. 13

    带有原始套接字的python套接字setsockopt

  14. 14

    Python:在OSX中使用原始套接字

  15. 15

    原始套接字未收到icmp响应

  16. 16

    Golang的原始套接字嗅探

  17. 17

    使用原始套接字的ping请求失败

  18. 18

    Linux内核中原始套接字的工作

  19. 19

    在原始套接字中连接功能?

  20. 20

    您可以在一个套接字接收调用中获得两个数据包以进行多播吗?

  21. 21

    PHP多连接套接字(广播问题)

  22. 22

    是否有到原始套接字的安全接口?

  23. 23

    原始套接字中的TCP数据包-Centos 6.6

  24. 24

    如何在Python中从套接字读取原始字节?

  25. 25

    原始以太网套接字填充sockaddr_ll

  26. 26

    通过原始套接字发送源MAC和IP

  27. 27

    如何解决Windows 7下的“原始套接字限制”?

  28. 28

    python原始套接字使用的服务器主机

  29. 29

    Python中的QDISC_BYPASS(原始套接字)

热门标签

归档