Skip to content

Instantly share code, notes, and snippets.

@magnifikus
Created January 15, 2013 15:32
Show Gist options
  • Save magnifikus/4539475 to your computer and use it in GitHub Desktop.
Save magnifikus/4539475 to your computer and use it in GitHub Desktop.
int getDefaultAddr(char * addr, size_t addrlen) {
const char* google_dns_server = "8.8.8.8";
int dns_port = 53;
struct sockaddr_in serv;
int sock = socket ( AF_INET, SOCK_DGRAM, 0);
if(sock < 0) {
perror("Socket error");
return 0;
}
memset( &serv, 0, sizeof(serv) );
serv.sin_family = AF_INET;
serv.sin_addr.s_addr = inet_addr( google_dns_server );
serv.sin_port = htons( dns_port );
int err = connect( sock , (const struct sockaddr*) &serv , sizeof(serv) );
if (err) {
perror("connect");
return 0;
}
struct sockaddr_in name;
socklen_t namelen = sizeof(name);
err = getsockname(sock, (struct sockaddr*) &name, &namelen);
if (err) {
perror("getsockname");
close(sock);
return 0;
}
const char* p = inet_ntop(AF_INET, &name.sin_addr, addr, addrlen);
if(p != NULL)
printf("Local ip is : %s \n" , addr);
else {
printf("error parsing host ip\n");
close(sock);
return 0;
}
close(sock);
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment