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
'OS > Linux' 카테고리의 다른 글
screen, 자유롭고 안정적인 Linux session의 사용 (0) | 2017.01.21 |
---|---|
Linux - iconv - 파일(File) 인코딩(Encoding) 변경 (0) | 2017.01.07 |
Ubuntu, wpa_supplicant 빌드/컴파일 하기 (0) | 2016.12.29 |
Linux/Ubuntu, Samba 설정하기. (0) | 2016.08.04 |
Linux 접속 차단하기. (TCP Wrapper) (0) | 2016.07.22 |
Linux/Ubuntu, 용량 큰 파일/디렉토리 찾아내기. (0) | 2016.07.13 |
Linux/Ubuntu, CD/DVD 를 ISO로 만들기 (0) | 2016.07.13 |
terminator, Linux 다중 분할 터미널 (0) | 2016.07.12 |