
int Getip(const char* url, const char* port, char* buf) {
if (!url || !port || !buf )return -1;
SOCKET slisten = 0;
struct addrinfo pHints, *ppResult = NULL, *ptr = NULL;
bzero(&pHints, sizeof(struct addrinfo)); /* 清零 */
pHints.ai_family=AF_INET6;
pHints.ai_socktype = SOCK_STREAM;
pHints.ai_protocol = IPPROTO_TCP;
int tt = getaddrinfo(url, port, &pHints, &ppResult);
if (tt) {
tt = -2;
} else {
char tempp[1024];
//sockaddr_ipv4 = (struct sockaddr_in *)
int y = sprintf((char*)tempp, "GET / HTTP/1.1\r\nAccept: image/x-icon\r\nAccept-Language: zh-Hans-CN,zh-Hans;q=0.5\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko\r\nAccept-Encoding: gzip, deflate\r\nHost: %s\r\nConnection: close\r\n\r\n", url);
for (ptr = ppResult; ptr != NULL ; ptr = ptr->ai_next) {
if (ptr->ai_family == AF_INET) {
struct sockaddr_in *p = (struct sockaddr_in *)ptr->ai_addr;
wm_log_info("Getip IPv4 address: %s", ipaddr_ntoa((const ip_addr_t *)&p->sin_addr.s_addr));
}
#if CONFIG_EXAMPLE_IPV6
else if (ptr->ai_family == AF_INET6) {
struct sockaddr_in6 *p = (struct sockaddr_in6 *)ptr->ai_addr;
wm_log_info("Getip IPv6 address: %s", ip6addr_ntoa((const ip6_addr_t *)&p->sin6_addr));
}
#endif
if (ptr->ai_family == AF_INET || ptr->ai_family == AF_INET6) {
//创建套接字
slisten = socket(ptr->ai_family, SOCK_STREAM, 0);
if (slisten == INVALID_SOCKET) {
tt = -3; //socket
} else {
if (connect(slisten, (const struct sockaddr*) ptr->ai_addr, (int) ptr->ai_addrlen) == SOCKET_ERROR) {
tt = -5; //continue;
} else {
if (send(slisten, tempp, y, 0)<0) { //strlen(tempp)
tt = -6; //
} else
{
int n = recv(slisten, tempp, 1024, 0);
if (n < 1 ) {
tempp[0] = 0;
tt = -7; //recv
} else
{
tempp[n] = 0;
}
}
}
closesocket(slisten);
}
}
}
freeaddrinfo(ppResult);//用于清理
}
char sip[40];
int ww = Getip("www.163.com", "80", sip);
wm_log_info("Getip:%s err %d",sip,ww);
[I] (7519) test: Getip IPv6 address: 240E:FF:901C:400:3::3EE
[I] (16771) test: Getip: err -5
查看更多