Skip to content

Instantly share code, notes, and snippets.

@nextkitt
Created April 26, 2019 05:53
Show Gist options
  • Save nextkitt/640bbe9b4679560efb6efc1280869b0c to your computer and use it in GitHub Desktop.
Save nextkitt/640bbe9b4679560efb6efc1280869b0c to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int GetLocalIp(char* buffer, size_t buflen)
{
if (buflen < 16) {
return 1;
}
int sock = socket(AF_INET, SOCK_DGRAM, 0);
if (-1 == sock) {
return 1;
}
const char* remoteIp = "10.255.255.255";
uint16_t port = 53;
struct sockaddr_in serv;
memset(&serv, 0, sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_addr.s_addr = inet_addr(remoteIp);
serv.sin_port = htons(port);
int err = connect(sock, (const struct sockaddr*) &serv, sizeof(serv));
if (0 != err) {
return 1;
}
struct sockaddr_in name;
socklen_t namelen = sizeof(name);
err = getsockname(sock, (struct sockaddr*) &name, &namelen);
if (0 != err) {
return 1;
}
if(NULL == inet_ntop(AF_INET, &name.sin_addr, buffer, buflen)) {
return 1;
}
close(sock);
return 0;
}
int main(int argc, char* argv[]) {
char buffer[32] = "";
GetLocalIp(buffer, sizeof(buffer));
printf("local ip: %s\n", buffer);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment