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

标签 c++ linux sockets dhcp

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


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

关于c++ - 如何将源IP地址设置为0.0.0.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878158/

相关文章:

c++ - MSVC 2013 : crash at addpd xmm6, xmmword ptr [rax+rbx*8]

c++ - 需要用c++中的值替换字符串提示的子字符串

c++ - Dlib r_squared C2059 错误

linux - _mm_clflush 真的会刷新缓存吗?

linux - 如何为 linux shell 设置 TERM 环境变量

c++ - 调试在嵌入式 Linux 设备上运行的 C/C++ 应用程序的内存泄漏

.net - 在c++/cli中将std::string或string ^转换为字节数组

c++ - C++ 标准中 [basic.scope.hiding] 中的 "same scope"到底意味着什么?

java - 检查 Java Socket 中的传入数据

python - socket.accept 错误 24 : To many open files