it-swarm.dev

Příkaz pro určení mé veřejné IP?

Pokud se zkontroluji pomocí google , uvidím svou veřejnou IP. Je na příkazovém řádku Ubuntu něco, co mi dá stejnou odpověď?

673
kfmfe04

Pokud nejste za routerem, můžete to zjistit pomocí ifconfig.

Pokud jste za routerem, váš počítač nebude vědět o veřejné IP adrese, protože router provede překlad síťových adres. Můžete se zeptat nějakého webu, jaká je vaše veřejná IP adresa pomocí curl nebo wget a extrahovat z něj potřebné informace:

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

nebo kratší

curl https://ipinfo.io/ip
948
Michael K

K nalezení externího ip můžete použít externí webové služby nebo použít systémové metody. Nejjednodušší z nich je použití externí služby, řešení založená na ifconfig budou ve vašem systému fungovat, pouze pokud nejste za NAT. tyto dvě metody byly podrobně diskutovány níže.

Hledání externí IP pomocí externích služeb

Nejjednodušší způsob je použít externí službu prostřednictvím prohlížeče příkazového řádku nebo nástroje pro stahování. Protože wget je ve Ubuntu standardně k dispozici, můžeme jej použít.
Chcete-li najít svůj ip, použijte-

$ wget -qO- https://ipecho.net/plain ; echo

Zdvořilost :

Můžete také použít lynx (prohlížeč) nebo curl namísto wget s malými obměnami výše uvedeného příkazu k nalezení externího ip.

Pomocí curl vyhledejte ip:

$ curl https://ipecho.net/plain

Pro lepší formátování výstupu použijte:

$ curl https://ipecho.net/plain ; echo

Rychlejší (pravděpodobně nejrychlejší) metoda používající Dig s OpenDNS jako resolver:

Ostatní odpovědi zde všechny přes HTTP na vzdálený server. Některé z nich vyžadují analýzu výstupu nebo spoléhají na záhlaví User-Agent, aby server reagoval prostým textem. Také se mění poměrně často (jít dolů, změnit své jméno, umístit reklamy, může změnit výstupní formát atd.).

  1. Protokol odezvy DNS je standardizován (formát zůstane kompatibilní).
  2. Historicky služby DNS (OpenDNS, Google Public DNS, ..) mají tendenci přežít mnohem déle a jsou stabilnější, škálovatelnější a obecně se o ně staráme než o jakoukoli novou hip whatismyip.com HTTP službu, která je dnes horká.
  3. (pro ty geeky, kteří se zajímají o mikrooptimalizaci), by tato metoda měla být inherentně rychlejší (ať už je to jen pár mikrosekund).

Použití Dig s OpenDNS jako resolveru:

$ Dig +short myip.opendns.com @resolver1.opendns.com

111.222.333.444

Zkopírováno z: https://unix.stackexchange.com/a/81699/14497

Hledání externí IP, aniž by se spoléhali na externí služby

  • Pokud znáte název síťového rozhraní

Do terminálu zadejte následující příkaz:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

Nahoru Nahraďte <interface_name> s názvem vašeho skutečného rozhraní, např .: eth0, eth1, pp0, atd...

Příklad použití:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
  • Pokud neznáte název síťového rozhraní

Do terminálu zadejte následující text (získá název a IP adresu každého síťového rozhraní ve vašem systému):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

Příklad použití:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444

N.B: Výstupy jsou indikativní a nejsou skutečné.

Zdvořilost: https://www.if-not-true-then-false.com/2010/linux-get-ip- adresa /

[~ # ~] aktualizace [~ # ~]

  1. LANG=c byl přidán do použití založených na ifconfig, takže vždy dává anglický výstup, bez ohledu na nastavení národního prostředí.
390
saji89

Můj oblíbený byl vždy:

curl ifconfig.me

jednoduché, snadno psatelné.

Nejprve musíte nainstalovat lokny;)

Pokud je soubor ifconfig.me vypnutý, zkuste adresu icanhazip.com nebo ipecho.net

curl icanhazip.com

nebo

curl ipecho.net
120
Panther

icanhazip.com je můj oblíbený.

curl icanhazip.com

Můžete požádat o IPv4 výslovně:

curl ipv4.icanhazip.com

Pokud nemáte curl, můžete místo toho použít wget:

wget -qO- icanhazip.com
60
yprez

Zjistil jsem, že je všechno nepříjemné a pomalé, takže jsem napsal svůj vlastní. Je to jednoduché a rychlé.

Jeho API je na http://api.ident.me/

Příklady:

curl ident.me
curl v4.ident.me
curl v6.ident.me
49
Pierre Carrier

Chcete-li zjistit svou veřejnou IP, můžete místo HTTP požadavku použít DNS požadavek:

$ Dig +short myip.opendns.com @resolver1.opendns.com

Používá resolver1.opendns.com dns server k vyřešení magického myip.opendns.com hostname na your ip adresa.

44
jfs

Amazon AWS

curl http://checkip.amazonaws.com

Ukázkový výstup:

123.123.123.123

Mám to rád protože:

  • vrací pouze prostý text IP, nic jiného
  • je to od známého poskytovatele, u kterého je nepravděpodobné, že se v dohledné době přepne do režimu offline

Ten, který používám, je:

wget -O - -q icanhazip.com

Ano, můžete mít ip :-)

18
jflaflamme

Zadejte přesně toto, stiskněte Enter kde je uvedeno:

telnet ipecho.net 80Enter
GET /plain HTTP/1.1Enter
Host: ipecho.net Enter
BROWSER: web-kitEnter
Enter

To ručně odešle požadavek HTTP, který vrátí vaši IP na konci HTTP/1.1 200 OK reply

Příklad výstupu:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
Host: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
11
Liam

Za tímto účelem byl vynalezen OMRÁČENÝ . Jako klient můžete poslat požadavek na veřejně přístupný server STUN a nechat mu vrátit IP adresu, kterou vidí. Jakási nízká úroveň whatismyip.com, protože nepoužívá žádný HTTP a žádné inteligentně vytvořené servery DNS, ale neúprosně rychlý protokol STUN.

Pomocí stunclient

Pokud máte nainstalován stunclient (apt-get install stuntman-client na debian/ubuntu) můžete jednoduše:

$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

kde A.B.C.D je IP adresa vašeho zařízení v místní síti a W.X.Y.Z je adresa IP serverů, jako jsou webové stránky viditelné zvnějšku (a ten, který hledáte). Pomocí sed můžete snížit výše uvedený výstup pouze na IP adresu:

stunclient stun.services.mozilla.com |
    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

Vaše otázka však byla, jak ji najít pomocí příkazového řádku, což by mohlo vyloučit použití klienta STUN. Takže se divím ...

Pomocí bash

Požadavek STUN lze ručně zpracovat, poslat na externí server STUN pomocí netcat a může být následně zpracován pomocí dd, hexdump a sed takto:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

Echo definuje binární požadavek STUN (0x0001 označuje Binding Request) mající délku 8 (0x0008) s cookie 0xc00cee a některými vloženými věcmi z wireshark. Z odpovědi jsou převzaty, vyčištěny a vytištěny pouze čtyři bajty představující externí IP.

Pracovní, ale nedoporučuje se pro produkční použití :-)

P.S. Mnoho serverů STUN je k dispozici, protože se jedná o základní technologii pro SIP a WebRTC.) Použití jednoho z Mozilly by mělo být bezpečné z hlediska ochrany osobních údajů, ale můžete také použít jiný: seznam serverů STUN

10
Victor Klos

Další rychlý (možná relativně rychlejší)

curl ipecho.net/plain
9
Mohnish

Mám na to hloupou službu prostřednictvím telnetu. Něco takového:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

Neváhejte jej použít.

7
Gelma

Webovou stránku můžete číst pouze pomocí bash, bez curl, wget:

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
5
jfs

UPnP může být dotázáno na mnoho domácích směrovačů:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

Poté z odpovědi odpovězte na IP adresu.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
2
user372194

Pokud používáte DD-WRT, pak to funguje pro mě:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'

nebo

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
  • Kde 192.168.1.1 je IP adresa brány/směrovače LAN routeru DD-WRT.

  • Komponenta - s znamená tichý (tj. Nezobrazovat informace o průběhu zvlnění).

  • Oh, měl bych zmínit, že výše uvedené používám s "DD-WRT v24-sp2 (01/04/15) std".
2
CMP

Použijte cURL s ipogre.com (jsou podporovány IPv4 a IPv6).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

http://www.ipogre.com/faqs/linux.php

2
Jacob

Pro ty z nás, kteří mají přihlašovací přístup k našim směrovačům, je pomocí skriptu zeptat routeru, jaká je jeho 'WAN adresa IP) nejúčinnějším způsobem určení externí adresy IP. Například následující python skript vytiskne externí IP pro můj router Medialink MWN-WAPR300N:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

Všimněte si, že to není příliš bezpečné (jako je tomu v případě pověření prostého textu a přihlašování do většiny směrovačů) a rozhodně to není přenosné (je třeba změnit pro každý směrovač). Je to však velmi rychlé a naprosto rozumné řešení na fyzicky zabezpečené domácí síti.

Chcete-li upravit skript pro jiný směrovač, doporučujeme použít doplněk tamperdata v firefoxu k určení, jaké požadavky HTTP provést.

2
cronburg

Získají místní adresy IP:

ifconfig

nebo pro kratší výkon:

ifconfig | grep inet

taky

ip addr show

a pravděpodobně:

hostname -I

To by mělo získat externí IP

wget http://smart-ip.net/myip -O - -q ; echo

N.B. Pokud vám nevadí instalace curl, toto také:

curl http://smart-ip.net/myip
2
Wilf

Pokud jste nainstalovali rysa v typu Ubuntu

lynx bot.whatismyipaddress.com
1
Binny

Možná jsem trochu pozdě, ale inxi to zvládne docela snadno.

Nainstalovat inxi

Sudo apt install inxi

Poté spusťte následující příkaz

inxi -i

Příklad s blokováním mých informací pomocí možnosti z pro zkopírování a vložení na weby, jako je tento:

~$ inxi -iz
Network:   Card: NVIDIA MCP77 Ethernet driver: forcedeth
           IF: eth0 state: up speed: 1000 Mbps duplex: full mac: <filter>
           WAN IP: <filter>
           IF: eth0 ip-v4: <filter> ip-v6-link: N/A

Kde je uvedeno <filter> je místo, kde se objeví vaše WAN IP, IPv4, MAC adresa atd.

0
Terrance

použijte ip!

ip addr show

pak vyhledejte příslušný adaptér (nikoli lo a obvykle eth0) a vyhledejte IP adresu poblíž inet.

0
Eliran Malka