如何将源IP地址设置为0.0.0.0?

How can I set the source IP address to 0.0.0.0?

我想编写简单的 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...)。

内核通过在退出接口上使用 IP 填充 "for free" 源地址来为您提供服务。

如果您不想这样做,您可能必须使用原始套接字并提供您自己的 IP header 和 IP_HDRINCL. Look for SOCK_RAW


一个简单的作弊方法是 stracetruss 你的 DHCP 客户端,看看它做了什么。