0
IP4와 IP6 주소 모두에서 작동하는 함수가 필요하며 주소를 문자열 표현 (IP4) 또는 16 진수 표현 (IP6)에서 긴 값으로 변환해야합니다. 내가 가진 현재의 코드는 다음과 같습니다C에서 IP4 및 IP6 주소를 긴 값으로 변환하는 방법은 무엇입니까?
struct addrinfo *addr;
// This converts an char* ip_address to an addrinfo, so now I know whether
// it's a IP4 or IP6 address
int result = getaddrinfo(ip_address, NULL, NULL, &addr);
if (result ==0) {
struct in_addr dst;
result = inet_pton(addr->ai_family, ip_address, &dst);
long ip_value = dst->s_addr;
freeaddrinfo(addr);
return ip_value;
}
나는 dst->의 s_addr에서 긴받을 수 있나요하지만 난이 잘못되었다고 확신합니다. 이 문제를 해결하는 방법에 대한 모든 조언을 많이드립니다! 모든 dst
의
안녕하세요. 도움을 많이 주셔서 감사합니다. 내 inet_pton 호출이 잘못되었다고 말하면 getaddrinfo 호출을 의미합니까? IP6에 대해서, 그렇습니다. 128 비트가되어야합니다. 우리가 이것을 필요로 할 것이므로, 지금 고칠 것입니다. inet_pton 호출도 수정해야합니까? – DrDee
@DrDee 죄송합니다. 질문을 잘못 읽었습니다. 귀하의'inet_pton' 전화는 실제로 거의 정확합니다, 나는 나의 대답을 편집했다. – cnicutar
buf에있는 값은 항상 140734799738144 (sizeof struct in6_addr 인 것 같습니다)입니다. 계속 묻는 것에 대해 유감스럽게 생각하지만 여기에서 IP 주소의 '긴'표현을 어떻게 얻을 수 있습니까? – DrDee