귀하의 질문에 대한 확실한 정답이 없다고 생각합니다. 대신 원하는 것에 가까워지는 방법이 많이 있습니다. 따라서이를 수행하는 방법에 대한 몇 가지 힌트를 제공 할 것입니다.
시스템에 2 개 이상의 인터페이스 ( lo
하나로 계산)가있는 경우 올바른 인터페이스를 쉽게 자동 감지하는 데 문제가 있습니다. 이를 수행하는 방법에 대한 몇 가지 요리법이 있습니다.
예를 들어 문제는 호스트가 NAT 방화벽 뒤의 DMZ에있어 공용 IP를 일부 개인 IP로 변경하고 요청을 전달하는 경우입니다. 컴퓨터에는 10 개의 인터페이스가있을 수 있지만 공용 인터페이스에는 하나만 해당됩니다.
방화벽이 소스 IP를 완전히 다른 것으로 변환하는 double-NAT에있는 경우 자동 감지조차 작동하지 않습니다. 따라서 기본 경로가 공용 인터페이스가있는 인터페이스로 연결되는지 확신 할 수 없습니다.
기본 경로를 통해 감지
이것이 자동 감지에 권장되는 방법입니다.
같은 뭔가가 ip r get 1.1.1.1
일반적으로 당신에게 기본 경로를 가진 인터페이스를 말한다.
좋아하는 스크립팅 / 프로그래밍 언어로 이것을 재현 strace ip r get 1.1.1.1
하려면 노란 벽돌 길을 사용 하고 따르십시오.
설정 /etc/hosts
당신이 통제력을 유지하고 싶다면 이것은 나의 추천입니다
/etc/hosts
같은 항목을 만들 수 있습니다.
80.190.1.3 publicinterfaceip
그런 다음이 별칭 publicinterfaceip
을 사용 하여 공용 인터페이스를 참조 할 수 있습니다.
슬프게도 haproxy
IPv6로이 트릭을 익히지 않습니다.
환경 사용
이것은 /etc/hosts
당신이 그렇지 않은 경우에 대한 좋은 해결 방법입니다 .root
과 동일 /etc/hosts
. 그러나 이것을 위해 환경을 사용하십시오. /etc/profile
또는 ~/.profile
이것을 시도 할 수 있습니다 .
따라서 프로그램에 변수가 필요한 경우 MYPUBLICIP
다음과 같은 코드를 포함 할 수 있습니다 (이것은 C입니다. 여기에서 C ++를 자유롭게 만들 수 있습니다).
#define MYPUBLICIPENVVAR "MYPUBLICIP"
const char *mypublicip = getenv(MYPUBLICIPENVVAR);
if (!mypublicip) { fprintf(stderr, "please set environment variable %s\n", MYPUBLICIPENVVAR); exit(3); }
따라서 다음 /path/to/your/script
과 같이 스크립트 / 프로그램을 호출 할 수 있습니다.
MYPUBLICIP=80.190.1.3 /path/to/your/script
이것은 crontab
.
모든 인터페이스를 열거하고 원하지 않는 인터페이스 제거
사용할 수없는 필사적 인 방법 ip
원하지 않는 것을 알고있는 경우 모든 인터페이스를 열거하고 모든 잘못된 인터페이스를 무시할 수 있습니다.
이 접근 방식에 대한 답변은 이미 https://stackoverflow.com/a/265978/490291 인 것 같습니다 .
DLNA처럼
술에 빠져 죽으려는 술취한 남자의 길
네트워크의 모든 UPnP 게이트웨이를 열거 할 수 있으며이 방법으로 "외부"항목에 대한 적절한 경로를 찾을 수 있습니다. 기본 경로가 가리 키지 않는 경로에있을 수도 있습니다.
이에 대한 자세한 내용은 https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protocol을 참조 하십시오.
이렇게하면 기본 경로가 다른 곳을 가리키는 경우에도 실제 공용 인터페이스가 어떤 것인지 좋은 인상을 받게됩니다.
더 있습니다
산이 선지자를 만나는 곳
IPv6 라우터는 올바른 IPv6 접두사를 제공하기 위해 스스로를 광고합니다. 접두사를 보면 내부 IP가 있는지 글로벌 IP가 있는지에 대한 힌트를 얻을 수 있습니다.
IGMP 또는 IBGP 프레임을 수신하여 적합한 게이트웨이를 찾을 수 있습니다.
2 ^ 32 개 미만의 IP 주소가 있습니다. 따라서 LAN에서 모두 ping하는 데 오래 걸리지 않습니다. 이것은 귀하의 관점에서 인터넷의 대부분이 어디에 위치하는지에 대한 통계적 힌트를 제공합니다. 그러나 당신은 유명한 https://de.wikipedia.org/wiki/SQL_Slammer 보다 조금 더 현명해야합니다.
ICMP 및 ARP도 네트워크 측 파대 정보에 대한 좋은 소스입니다. 그것은 당신에게도 도움이 될 것입니다.
이더넷 브로드 캐스트 주소를 사용하여 DHCP (DHCPv6 포함) 등과 같이 종종 도움이되는 모든 네트워크 인프라 장치에 연결할 수 있습니다.
이 추가 목록은 아마도 끝이없고 항상 불완전 할 것입니다. 모든 네트워크 장치 제조업체가 자신의 장치를 자동으로 감지하는 방법에 대해 새로운 보안 허점을 발명하고 있기 때문입니다. 그것은 종종 존재하지 않는 일부 공용 인터페이스를 감지하는 방법에 많은 도움이됩니다.
'그런가 말했다. 밖.