OS/Linux
자기 자신 IP Address C 코드로 확인하기.(SIOCGIFADDR)
TechNote.kr
2016. 7. 27. 10:09
728x90
현재 해결해야하는 미션은 자기가 쏜 Broadcast packet을 받을 경우 무시하는 코드를 작성해야만 한다. 들어오는 Packet에 대해서는 패킷을 보고 SRC IP Address 확인이 가능한데 나의 IP Address는 어떻게 확인이 가능한가.
위의 사진과 같이 ifconfig 를 통해 확인했을 때 enp0s3 이라는 이름의 interface의 10.0.2.15 라는 IP Address를 코드상으로 받아와야 한다.
#include <stdio.h> #include <sys/ioctl.h> #include <net if.h> #include <string.h> #include <arpa/inet.h> int main() { struct ifreq ifr; char ipstr[40]; int s; s = socket(AF_INET, SOCK_DGRAM, 0); strncpy(ifr.ifr_name, "enp0s3", IFNAMSIZ); if (ioctl(s, SIOCGIFADDR, &ifr) < 0) { printf("Error"); } else { inet_ntop(AF_INET, ifr.ifr_addr.sa_data+2, ipstr,sizeof(struct sockaddr)); printf("myOwn IP Address is %s\n", ipstr); } return 0; }
위 코드와 같이 Socket descriptor에 SIOCGIFADDR 을 ioctl로 내려주면 원하는 interface에 대해 해당 interface의 IP Address를 구할 수 있다.
코드를 빌드해서 확인해 보면 "10.0.2.15" IP Address를 정상적으로 받아옴을 알 수 있다.
728x90