【发布时间】:2015-11-12 08:56:03
【问题描述】:
遗留代码有gethostbyname 来获取主机的IP 地址。然后将转换后的地址的整数部分传递给IcmpSendEcho。
我正在用getaddrinfo 替换这个过时的函数。
DWORD GetIPAddressInt(const char* pAddress)
{
PADDRINFOA addr = nullptr;
addrinfo hints = { 0 };
hints.ai_family = AF_INET;
// hints.ai_socktype = ??;
// hints.ai_protocol = ??;
getaddrinfo(pAddress, nullptr, &hints, &addr);
auto sockaddr_ipv4 = reinterpret_cast<sockaddr_in*>(addr->ai_addr);
return sockaddr_ipv4->sin_addr.S_un.S_addr;
}
我的问题是:ai_socktype 和 ai_protocol 成员呢?
- 套接字类型应该是
SOCK_RAW吗? - 协议应该是
IPPROTO_ICMP(在标头中,而不是在 MSDN 中)?
再次重复,生成的 IP 地址将用于发送 ICMP 回显请求,因此我想知道是否需要 RAW/ICMP?目前,IPv6 不用担心。
【问题讨论】:
标签: c++ windows winapi winsock2 icmp