我想编写简单的DHCP客户端(将通过WLAN工作),我在正确发送初始消息DHCP DISCOVER
时遇到问题 - 它被发送(我在捕获WLAN接口时在Wireshark中看到它) ,但源地址是我的适配器的地址。如何将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 ...)设置的。
答案 0 :(得分:5)
内核通过填充&#34;免费提供服务。退出接口上带有IP的源地址。
如果您不想要,您可能必须使用原始套接字并使用IP_HDRINCL
提供您自己的IP标头。寻找SOCK_RAW
。
欺骗这个问题的一个简单方法是向{001}客户端strace
或truss
查看它的作用。