| 
#define WIN32_LEAN_AND_MEAN     #define _WIN32_WINNT 0x501     #include <windows.h>     #include <winsock2.h>     #include <stdio.h>     #include <string.h>     #include <stdlib.h>     #include <sys/types.h>     #include <ws2tcpip.h>      #pragma comment (lib, "Ws2_32.lib")      // int iResult;     WSADATA wsaData;     int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);      int inet_pton(int af, const char *src, void *dst) {         struct sockaddr_storage ss;         int size = sizeof(ss);         char src_copy[INET6_ADDRSTRLEN+1];          ZeroMemory(&ss, sizeof(ss));         /* stupid non-const API */         strncpy (src_copy, src, INET6_ADDRSTRLEN+1)         src_copy[INET6_ADDRSTRLEN] = 0;          if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) {             switch(af) {                 case AF_INET:                     *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr;                     return 1;                 case AF_INET6:                     *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr;                     return 1;             }         }         return 0;     }     const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) {         struct sockaddr_storage ss;         unsigned long s = size;         ZeroMemory(&ss, sizeof(ss));         ss.ss_family = af;         switch(af) {             case AF_INET:                 ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src;                 break;             case AF_INET6:                 ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src;                 break;             default:                 return NULL;         }         /* cannot direclty use &size because of strict aliasing rules */         return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)?                dst : NULL;     }     int lookup_host () {         struct addrinfo hints, *res;         int errcode;         char addrstr[100];         void *ptr;         memset (&hints, 0, sizeof (hints));         hints.ai_family = AF_INET6;         errcode = getaddrinfo ("IPv6test.ntes53.netease.com", NULL, &hints, &res);         if (errcode != 0)         {             perror ("getaddrinfo");             printf("%d",errcode);             return -1;         }         while (res)         {             // inet_ntop (res->ai_family, res->ai_addr->sa_data, addrstr, 100);             sockaddr_in in1;             memcpy(&in1.sin_addr, res->ai_addr->sa_data, sizeof(res));             switch (res->ai_family)             {                 case AF_INET:                     ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr;                     break;                 case AF_INET6:                     ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;                     break;             }             inet_ntop(res->ai_family, ptr, addrstr, 100);             // sockaddr_in6 in;             // memcpy(&in.sin6_addr, ptr, sizeof(ptr));             printf ("IPv%d address: %s (%s)n", res->ai_family == PF_INET6 ? 6 : 4,                    addrstr, res->ai_canonname);             //printf ("IPv%d address: %s (%s)n", res->ai_family == PF_INET6 ? 6 : 4,             //        inet_ntoa(in.sin6_addr), res->ai_canonname);             res = res->ai_next;         }         return 0;     }     int main (void) {         printf("startn");         lookup_host(); }     } 
 Pythonimport socket result = socket.gethostbyname("IPv6test.ntes53.netease.com") print result 
 import socket result = socket.getaddrinfo("IPv6test.ntes53.netease.com", 0, socket.AF_INET6) print result result = socket.getaddrinfo("IPv6test.ntes53.netease.com", 0, socket.AF_INET) print result result = socket.getaddrinfo("IPv6test.ntes53.netease.com", 0, socket.AF_UNSPEC) print result 
 当不指定 socktype 时,此值默认为 socket.AF_UNSPEC。 HTTP 请求Pythonrequests 包 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |