- #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();
- }
- }
Python
- import 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 请求
Python
requests 包 (编辑:好传媒网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|