【发布时间】:2023-02-12 14:53:44
【问题描述】:
我有来自直接连接到我的机器的特定设备的数据包。当我执行 tcpdump -i eno3 -n -n 时,我可以看到数据包:
23:58:22.831239 IP 192.168.0.3.6516 > 255.255.255.255.6516: UDP, length 130
eno3配置为192.168.0.10/24
当我以典型方式设置套接字时:
gOptions.sockfd = socket(AF_INET, SOCK_DGRAM, 0);
memset((void *)&gOptions.servaddr, 0, sizeof(struct sockaddr_in));
gOptions.servaddr.sin_family = AF_INET;
inet_pton(AF_INET, gOptions.sourceIP, &(gOptions.servaddr.sin_addr));
gOptions.servaddr.sin_port = htons(gOptions.udpPort);
bind(gOptions.sockfd, (struct sockaddr *)&gOptions.servaddr, sizeof(struct sockaddr_in));
我在端口“6516”上使用“255.255.255.255”的sourceIP - 它连接并读取。
然而,我想要做的是绑定,这样我就限制了我与源 IP 的连接——“192.168.0.3”。我已经弄清楚如何使用该设备(“192.168.0.10”)的 iface 的任一设备名称(“eno3”)连接设备 - 但这无济于事,因为我可能有多个设备连接到“192.168. 0.10" 在该端口上的 blab,但我只想要来自 192.168.0.3 的数据包用于端口 6516。
我认为 s_addr - sin.addr 的一部分 - 是源 IP... 但事实并非如此。
【问题讨论】:
-
recvfrom()返回源地址。