我想编写简单的 DHCP 客户端(它将在 WLAN 上工作)并且我在正确发送初始消息 DHCP DISCOVER
时遇到问题 - 它已发送(我在捕获时在 Wireshark 中看到它WLAN 接口(interface)),但源地址是我的适配器的地址。如何将 IP 设置为“0.0.0.0”?
这是我的部分代码:
sockaddr_in src_addr;
memset(&src_addr, 0, sizeof(struct sockaddr_in));
src_addr.sin_family = AF_INET;
src_addr.sin_port = htons(m_sport);
src_addr.sin_addr.s_addr = htonl(INADDR_ANY);
status = bind(m_sockfd, reinterpret_cast<sockaddr *>(&src_addr), sizeof(sockaddr_in));
当我尝试 src_addr.sin_addr.s_addr = inet_addr("0.0.0.0");
时,源地址仍然设置为 eth0 (10.132...)。
最佳答案
内核通过在退出接口(interface)上“免费”填充带有 IP 的源地址来为您提供服务。
如果您不想这样做,您可能必须使用原始套接字并使用 IP_HDRINCL
提供您自己的 IP header 。 .寻找SOCK_RAW
.
一个简单的作弊方法是 strace
或 truss
您的 DHCP 客户端,看看它做了什么。
关于c++ - 如何将源IP地址设置为0.0.0.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878158/