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