ifconfig 또는 hostname -i 명령을 사용하여 IP 주소를 찾을 수 있습니다.
하지만 공개 IP는 어떻게 찾습니까?
(정적 공개 IP가 있지만 유닉스 명령을 사용하여 찾으려고합니다)
ifconfig 또는 hostname -i 명령을 사용하여 IP 주소를 찾을 수 있습니다.
하지만 공개 IP는 어떻게 찾습니까?
(정적 공개 IP가 있지만 유닉스 명령을 사용하여 찾으려고합니다)
답변:
curl ifconfig.me
curl ifconfig.me/ip
(IP 용)
curl ifconfig.me/all
(자세한 내용은 시간이 걸립니다)
자세한 명령을 보려면 다음 사이트를 방문하십시오 : http://ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
당신은 요청할 수 있습니다 myip.opendns.com
. OpenDNS에서. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. 또는 Windows의 경우 : nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
효과적인 것은 전체 답변을 거치지 않고 직접 IP를 얻는 것입니다.
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
참고 위에서 만이 리졸버의 IPv4의 현재 (없음에 대한 작동도 현재의 IPv6를 갖고있는 것 같다,하지만 당신은 생략하는 경우 -4
및 명시 적 -t a
, 당신은 구글을 제외하고 (이것은 미래에 분해 위험 txt
에 대한 어떤 수도 실제로 일을 Google에서 올바르게 사용하도록 설정 한 경우 IPv6 1 일).
을 myip.opendns.com
통해서만 해결할 수 resolver1.opendns.com
있으며, 그렇지 않은 경우도 auth1.opendns.com
있습니다. 따라서 DNS 하이재킹과 도메인 이름 중간자 (man-in-the-middle)를 수행하는 것 같습니다! 따라서에 resolver1.opendns.com
대한 권한이 없기 때문에 랜덤 리졸버의 IP를 찾는 데 사용할 수 없습니다 myip.opendns.com
.
참고이 o-o.myaddr.l.google.com
가장 유연하고 미래 지향적 접근 방식처럼 보이는; DNS 확인자가 클라이언트 서브넷에 대해 실험용 EDNS0 확장을 지원하는지 여부를 테스트하는 것도 좋습니다 (리졸버가 거의 지원하지 않음).
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
하거나 -6
필요로해야합니다.
이를 위해 간단하고 빠른 웹 서비스를 작성했습니다.
curl ident.me
IPv4를 요청할 수 있습니다 :
curl v4.ident.me
또는 IPv6 :
curl v6.ident.me
API는 http://api.ident.me/에 문서화되어 있습니다.
만약
인터페이스의 IP 주소 ( "inet addr :"부분)에 대한 ifconfig의 출력을 구문 분석하여 모든 인터페이스의 IP 주소 목록을 얻을 수 있습니다. 개인 범위에없는 하나의 IP 주소 ( http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses 참조 )는 공용 IP 주소입니다.
동일한 목록을 통해 얻을 수도 있습니다
ip addr show
파싱하기가 더 쉬울 수 있습니다.
인터넷에 직접 연결되어 있지 않은 경우 (NAT 등) 외부 도움없이 컴퓨터를 알 수 없으므로 공용 IP 주소를 찾을 수 없습니다. 그런 다음 다른 답변과 마찬가지로해야합니다.
NAT Traversal을 위해 설계된 STUN 프로토콜을 사용하여 조금 다른 접근 방식을 취했습니다. Ubuntu를 사용하는 경우 다음을 입력하여 "stun"패키지를 설치할 수 있습니다.
sudo apt-get install stun
패키지는 아마도 필요하지 않은 STUN 서버를 설치하지만이 문제를 해결하는 데 사용 된 STUN 테스트 클라이언트와 함께 제공됩니다. 이제 간단하지 않은 하나의 명령으로 퍼블릭 IP를 검색 할 수 있습니다.
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
이제 그 일이 있습니다 : stun은 공개 STUN 서버 "stunserver.org"에 접속하여 공개 IP로 응답을 얻습니다. 나머지 명령은 출력에서 IP를 필터링하는 것입니다.
text/html
의사 API가 반환하는 것에 적합합니다 .XML 또는 JSON이 아닙니다. text/plain
아마도,하지만 완전히 사용할 수 있습니다 text/html
.
wget -q -O - http://wgetip.com/
Google은 이제 공개 IP 주소를 표시합니다 : http://www.google.com/search?q=ip
User-Agent
페이지에 제공 되는 문자열을 기반으로 IP 주소 만 표시합니다 . Firefox에서는 작동합니다. "Firefox"문자열이 비활성화 된 SeaMonkey ( "general.useragent.compatMode.firefox"를 false로 설정)를 사용하면 갑자기 그렇지 않습니다. SeaMonkey를 포함하여 Gecko 기반의 다른 데스크탑 브라우저가 동일하게 호환되기 때문에 Google이 Gecko 대신 Firefox에서만 이와 같은 기능을 명시 적으로 활성화하는 이유를 전혀 알지 못합니다.
알았어 ... 이것은 사실 이후의 방법이며 게시 할 가치조차 없다는 것을 알고 있지만 여기 내 작업 솔루션이 있습니다.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
좋고 간단합니다.
hostname -I
(자본 'i')을 사용 하여이 작업을 수행 할 수도 있습니다 .
가장 간단한 방법은 제안 된대로 http://ifconfig.me/ 를 사용하는 것입니다 .
이 페이지에서 검색하려는 정보에 어떤 명령을 사용해야하는지 알 수 있습니다.
IP의 경우 :
ifconfig.me 컬또는
ifconfig.me/ip를 말리십시오
퍼블릭 호스트 이름 :
ifconfig.me/host를 말리십시오
XML 파일의 모든 정보 :
ifconfig.me/all.xml 컬
등 ... http://ifconfig.me를 확인하십시오.
나는 이것을 많이하고 많은 장치에서하고 있으므로 서버에서 내 자신의 두 가지 서비스를 만들었습니다.
웹 서버의 루트에있는 PHP 파일 :
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
쉘에서의 사용법 :
$ curl -4 mydomain.com
79.22.192.12
ipv6로 작업하기 :
$ curl mydomain.com
2a01:e34:ee7d:180::3
netcat으로 :
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Cisco 라우터에서 :
router#more http://myserver.com/index.php
79.22.192.12
커스텀 텔넷 서버로 빠른 해킹 : xinetd spawning / usr / bin / env :
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
그런 다음 텔넷으로 연결하십시오.
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
라우터와 동일하게 작동합니다.
router#telnet myserver.com
79.22.192.12
이 방법으로 일부 NAT 또는 프록시가 통신에 관련되어 있고 어떤 IP가 표시되는지 알고 싶다면 내부 네트워크에서 작동하도록 할 수 있습니다.
타사 서비스가 필요하지 않습니다.
외부 소스에 의존하지 않기 위해 라우터에 텔넷으로 연결하고 공용 인터페이스의 IP 주소를 얻는 것이 좋습니다. 다음은 expect 스크립트 예입니다.
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
그런 다음 위와 같은 스크립트를 실행하여 공개 IP를 얻습니다.
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
물론 이것은 ifconfig 명령을 사용하여 라우터 및 Linux 기반 라우터에 대한 관리자 액세스 권한이 있다고 가정합니다.
다른 많은 질문들도 중복됩니다 (따라서 -1 표).
간단한 쉘 스크립트 솔루션은 다음에서 찾을 수 있습니다.
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Linux, FreeBSD, SunOS 및 Apple Darwin (사소한 수정)에서 작동합니다.
쉘을 사용하여 외부 공급자를 사용하여 외부 IP를 확인할 수 있습니다
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
산출
lynx-덤프 http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -m1
나는 이것을한다. 그것은 단지 제 3 자의 개입없이 IP를 제공합니다 ..
IP 주소 표시 | grep eth0 | grep inet | tr -s ""| 컷 -f3 -d ""| 컷 -f1 -d "/"
비즈니스가 동적 IP 관리를 해결하는 호스트에 의존하는 또 다른 대안은 다음과 같습니다. "공공 서비스"사이트가 사라지거나 형식이 변경 될 수 있습니다.
1) 많은 무료 동적 DNS 서비스 중 하나에 서버를 등록하십시오 (예 : no-ip.com) xxx.no-ip.org와 같은 DNS 항목을 제공합니다.
2) 서비스의 동적 업데이트 도구를 설치합니다 (IP 변경 사항을 서비스에보고).
스크립트에서 IP 주소를 얻으려면 다음을 수행하십시오.
$external_ip = `dig +short xxx.no-ip.org`
cron 작업에서 동적 IP가 변경되었고 일부 구성 항목을 변경해야하는지 확인하는 데 유용합니다.
OS X에는 프라이빗 및 퍼블릭 IP를 모두 얻을 수있는 두 가지 간단한 솔루션이 있습니다 (LaunchBar를 사용하는 경우 보너스 코드 포함).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"