1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| /*
* get_ip()
*/
char * get_ip() {
fprintf(stdout,"get_ip()\r\n");
char * strGet = "GET / HTTP/1.0\r\n\r\n";
char buffer[1024];
char * ip = (char *)malloc(15 * sizeof(char));
short iBytesRecv = 0;
struct hostent * host;
SOCKADDR_IN sin;
SOCKET socket_local;
WSADATA wsaData;
int size = sizeof(sin);
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\r\n");
socket_local = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
if ( socket_local == INVALID_SOCKET )
{
printf( "Error at socket(): %ld\r\n", WSAGetLastError() );
WSACleanup();
return "Error at socket";
}
if( (host = gethostbyname ("whatismyip.org")) == NULL)
{
printf("Error at gethostbyname(): %ld\n", WSAGetLastError());
closesocket(socket_local);
WSACleanup();
return "Error at gethostbyname\r\n";
}
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
memcpy(&(sin.sin_addr),host->h_addr,host->h_length);
if( connect(socket_local, (struct sockaddr*)&sin, size) < 0 )
{
printf("Error at connect(): %ld\r\n", WSAGetLastError() );
closesocket(socket_local);
WSACleanup();
return "Error at connect";
}
send(socket_local, strGet, strlen(strGet), 0);
if( (iBytesRecv = recv(socket_local, buffer, 1024, 0)) == -1)
{
printf("Error at send(): %ld\r\n", WSAGetLastError() );
closesocket(socket_local);
WSACleanup();
return "Error at send";
}
buffer[iBytesRecv] = '\0';
sprintf(ip, strstr(buffer, "\r\n\r\n"));
closesocket(socket_local);
WSACleanup();
return ip;
} |
Partager