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解决问题