ubuntu 双网卡 不同网段 广播 (收集)

本文详细介绍了UDP广播的基本概念及应用场景,并针对双网卡环境下UDP通信出现的问题进行了深入探讨。文中给出了如何通过绑定特定IP地址来解决广播包接收不稳定的情况,并提供了具体的实现代码示例。
UDP广播地址:

全网广播地址: 255.255.255.255
组网广播地址: 192.168.0.255 //取决于你的网段

网段过滤
tcpdump -i eth1 net 192.168 and broadcast
tcpdump -i eth1 src net 192.168 and broadcast
tcpdump -i eth1 dst net 192.168 and broadcast

端口过滤
tcpdump port 22
tcpdump src port 22
tcpdump dst port 22

端口范围过滤
tcpdump portrange 22-125

ubuntu添加静态路由永久生效

route add default gw 169.254.0.254
#将路由添加到配置文件,永久生效
route add default gw 10.1.1.1254

双网卡下使用udp带来的问题

今天在工程人员现场布置程序时,出了一个疑难问题,客户端发送的UDP包服务程序能收到,但是服务程序收到的包的ip地址很随机,造成在生成唯一ID的时候出现问题,
经过仔细排查,终于发现是双网卡的问题。因为在绑定socket时并没有指定IP(客户端上是双网卡),客户端发送UDP包时,没有指定使用哪个网卡,造成了终端收不到的包的ip地址不固定,所以使用UDP时如果不能肯定是单网卡,一定要绑定IP。(可以通过遍历系统内部网卡的方式)

多网卡指定网卡进行UDP通信(添加静态路由解决双网卡问题 )全记录

https://blog.youkuaiyun.com/Scarlett_OHara/article/details/88556798

1

1)多网卡广播时,每个网卡都绑定一次,广播一次,才能保证网络里都能收到该广播消息

m_Socket = socket( AF_INET, SOCK_DGRAM, 0 );
 
     // set a socket option
     BOOL  bBroadcast = TRUE;
     nResult = setsockopt(    m_Socket, 
                             SOL_SOCKET,
                             SO_BROADCAST,
                             ( char *)&bBroadcast,
                             sizeof (  BOOL  )
                         );
m_saUdpCli.sin_family        = AF_INET;
     m_saUdpCli.sin_addr.s_addr    = inet_addr(m_szLocalHostIP); //这个IP就是我选择要发送广播包的网卡的IP
     m_saUdpCli.sin_port            = htons( UDP_UDAP_PORT );
nResult = bind( m_Socket, (SOCKADDR *)&m_saUdpCli,  sizeof (SOCKADDR_IN) );


2

如果是bind了0.0.0.0地址的某个端口接收组播数据

此时,需要手动建立路由从接收数据的网卡到组播地址

设备ip 10.33.3.34

eth0 111.0.1.2

eth1 10.33.3.33

通过抓包可以看到只有10.33.3.34到组播地址239.244.44.44的数据,没有239.244.44.44到10.33.3.33的数据。

命令行执行 route add 239.244.44.44 10.33.3.33解决问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值