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 ...)设置的.
内核通过在退出接口上使用IP"免费"填充源地址来为您提供服务.
如果你不想要,你可能不得不使用原始套接字并提供自己的IP头IP_HDRINCL.寻找SOCK_RAW.
欺骗这个的一个简单方法是strace或者truss你的DHCP客户端,看看它做了什么.
| 归档时间: |
|
| 查看次数: |
914 次 |
| 最近记录: |