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

tri*_*elt 0 c++ sockets linux dhcp

我想写一个简单的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));
Run Code Online (Sandbox Code Playgroud)

当我尝试时src_addr.sin_addr.s_addr = inet_addr("0.0.0.0");,源地址仍然是从eth0(10.132 ...)设置的.

cni*_*tar 5

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

如果你不想要,你可能不得不使用原始套接字并提供自己的IP头IP_HDRINCL.寻找SOCK_RAW.


欺骗这个的一个简单方法是strace或者truss你的DHCP客户端,看看它做了什么.