반응형

출처 : https://stackoverflow.com/questions/13322485/how-to-get-the-primary-ip-address-of-the-local-machine-on-linux-and-os-x

리눅스와 OS X에서 현재 컴퓨터의 중요 외부 IP를 알아내는 방법

저는 127.0.0.1보다 현재 컴퓨터(localhost)의 중요(첫 번째) IP 주소를 리턴하는 command를 찾고 있습니다.

이 해결책은 적어도 리눅스(Debian과 Redhat)과 OS X 10.7+에서 작동해야 합니다.

저는 둘다 ifconfig로 가능하지만 이 플랫폼 사이에 출력이 일관성이 없다는 게 문제입니다.


30개의 답변 중 2개의 답변

ifconfig로 부터 grep을 사용하여 IP 주소를 걸러낼 수 있습니다.

ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'

아니면 sed

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

만약 특정 인터페이스인 wlan0, eth0, 등등에만 관심이 있다면 다음처럼 사용가능합니다.

ifconfig wlan0 | ...

예를 들어 myip라 불리는 당신이 명령어를 만들어 .bashrc에 명령어를 별명(alias)으로 사용할 수 있습니다.

alias myip="ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'"

더 간단한 방법은 hostname -I(hostname -ihostname의 옛날 버전에서 되므로 댓글을 보세요.) 입니다. 하지만 리눅스에서만 됩니다.


리눅스에서(OS X 아님) 다음 명령어로 가능합니다.

hostname --ip-address
반응형
반응형

8-1. DNS(Domain Name System)

1) 도메인 이름이란? 

1. 영문으로 표현되는 계층적 주소 체계 방식.

※ IP 이후에 도메인이 나왔음. 중복되면 안 된다.

2. 각 나라마다 존재하는 Network Information Center에서 관리. => 약속

한국은 KRNIC(http://www.nic.or.kr, Korea Network Information Center)에서 담당.

3. 도메인 이름 = 호스트 이름 + 도메인 이름

예시) academy.freelec.co.kr = academy + freelec.co.kr

4. TCP/IP는 도메인 이름을 인식 못함.

※ IP와 도메인의 중계 역할을 하는 서버 : 도메인 서버


현실세계의 주소체계


인터넷 상에서의 주소체계

root 도메인

com : 회사, zw : 짐바브웨, kr : 한국

2차 도메인

co : 나라 안의 기업, ac : 나라 안의 대학, or : 행정기관, 


2) DNS 서버

1. 모든 도메인 이름은 해당 IP와 함께 DNS 서버에 등록되어야 한다.

※ DNS 서버는 테이블 형식으로 정보를 가지고 있다.

2. 도메임 이름을 IP 주소로 변환해 주는 작업을 한다.


1. host는 DNS 서버에 도메인 주소 질의

2. DNS 서버는 테이블 정보를 검색하여 IP를 답변해 준다.

※ 분산 데이터베이스 : 모르면 다른 DNS 서버에 물어본다.

3. host는 받은 IP정보를 통해 원하는 도메인 주소로 접속한다.


도메인 이름과 IP변환 과정

※ DNS 서버는 계층적 구조로 되어 있다. 모를 경우 부모에게 물어본다. 

루트 DNS는 모든 주소에 대한 정보를 어느 자식에 있는 지 알고 있다. (자손까지는 아님.)


8-2 IP 주소와 도메인 이름 사이의 변환

변환(도메인 이름 <-> IP주소)의 필요성

상대적으로 잦은 IP 변화에 대한 능동적인 문제 해결

※ IP를 하드코딩하면 IP주소가 바뀌었을 때는 접속할 수 없기 때문에 도메인 이름을 하드 코딩하여 IP가 바뀌더라도 도메인 이름으로 접속할 수 있도록 한다.

※ 한 도메인에 대해 IP를 여러 개 두고 상황에 따라 분산하여 접속할 수 있게 한다.


도메인 이름->IP주소 함수

※ 함수 자체가 DNS 서버에게 물어보고 IP주소등의 정보가 리턴된다.


#include<netdb.h>

struct hostent* gethostbyname(const char* name);

name : 도메인 이름 문자열


#include<winsock2.h>

struct hostent FAR *gethostbyname(const char FAR *name);

name : 도메인 이름 문자열


struct hostent 구조체 


struct hostent

{

char *h_name;

char **h_aliases;

int h_addrtype;

int h_length;

char **h_addr_list;

};


공식 이름(official name)

별명 목록(alias list)

호스트 주소 형태(host address type)

주소의 길이(IPV4 : 4, IPV6 : 16)

주소 목록(list of addresses)

struct hostent

{

char FAR * h_name;

char FAR * FAR * h_aliases;

short h_addrtype;

short h_length;

char FAR * FAR * h_addr_list;

}


※ IP주소를 일반화 하기 위해 char*를 사용하였다. IN_ADDR 구조체 형태로 IP주소가 저장되기 때문에 void* 포인터 형태가 더 좋았을 듯.


struct hostent 구조체 변수


반응형

+ Recent posts