Dacă am verifica cu google, pot să-mi văd IP-ul public. Este ceva pe Ubuntu de linie de comandă care va da același răspuns?
Dacă nu sunteți în spatele unui router, puteți afla folosind "ifconfig".
Dacă sunteți în spatele unui router, atunci computerul nu va ști despre adresa IP publică ca router-ul are o rețea adresă traducere. Ai putea cere unele site-ul ce adresa IP publică este folosind curl " sau " wget și extrage informațiile de care aveți nevoie de ea:
curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
sau mai scurt
curl https://ipinfo.io/ip
Pentru a găsi ip-ul extern, puteți utiliza fie extern de servicii bazate pe web, sau de a folosi sistemul de metode bazate pe. Cu atât mai ușor este de a utiliza serviciul extern, de asemenea, "ifconfig" bazate pe soluții va funcționa în sistemul dvs. numai daca're nu în spatele o NAT
. cele două metode au fost discutate mai jos în detaliu.
Cel mai simplu mod este de a utiliza un serviciu extern prin intermediul unui commandline browser-ul sau de a descărca instrument. Din `wget este disponibil în mod implicit în Ubuntu, ne putem folosi de asta. Pentru a găsi dvs. de ip, utilizați-
$ wget -qO- https://ipecho.net/plain ; echo
Amabilitatea:
Ai putea folosi, de asemenea, rasul
(browser) sau `curl "în loc de" wget cu variații minore la comanda de mai sus, pentru a găsi ip-ul extern.
Folosind curl` pentru a afla ip-ul:
$ curl https://ipecho.net/plain
Pentru o mai bună ieșire formatate utilizare:
$ curl https://ipecho.net/plain ; echo
dig " cu " OpenDNS
ca resolver:alte răspunsuri aici toate merg prin HTTP la un server de la distanță. Unele dintre ele necesită parsarea de ieșire, sau să se bazeze pe User-Agent antet pentru a face serverul răspunde în text simplu. Se schimba, de asemenea, destul de frecvent (du-te jos, să-și schimbe numele, pune-up ads, s-ar putea schimba formatul de ieșire etc.).
- DNS protocolul de reacție este standardizată (formatul va rămâne compatibil).
- Din punct de vedere istoric servicii DNS (OpenDNS, Google Public DNS, ..) tind să supraviețuiască mult mai mult și sunt mult mai stabilă, scalabilă și, în general, privit dupa decât orice șold nou whatismyip.com HTTP serviciu este cald azi.
- (pentru cei tocilari care pasă de micro-optimizare), această metodă ar trebui să fie în mod inerent mai repede (fie că este vorba doar de câteva micro secunde).
Folosind sape cu OpenDNS ca resolver:
$ dig +short myip.opendns.com @resolver1.opendns.com
111.222.333.444
Copiat de la: https://unix.stackexchange.com/a/81699/14497
Tastați următoarele în terminal:
$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
În cele de mai sus, înlocuiți <interface_name> cu numele tău real, interfata, e.g:
eth0,
eth1,
pp0`, etc...
Exemplu De Utilizare:
$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
Tastați următoarele în terminalul (aceasta devine numele si adresa ip de fiecare interfață de rețea în sistemul dvs.):
$ 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 }'
Exemplu De Utilizare:
$ 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: Ieșirile sunt orientative și nu este real.
Curtoazie: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/
UPDATE
LANG=c
a fost adăugat la "ifconfig" bazată pe utilizări, astfel încât să întotdeauna dă engleză de ieșire, indiferent de setarea locale.Preferata mea a fost întotdeauna :
curl ifconfig.me
simplu, ușor de tip.
Va trebui să instalați curl prima ;)
Dacă ifconfig.mi se încearcă icanhazip.com și sau ipecho.net
curl icanhazip.com
sau
curl ipecho.net
icanhazip.com este preferata mea.
curl icanhazip.com
Puteți solicita IPv4 în mod explicit:
curl ipv4.icanhazip.com
Dacă tu nu't au curl
poti folosi wget
în loc:
wget -qO- icanhazip.com
Am'am găsit totul să fie enervant și de lent, așa că mi-am scris singur. L's simplu și rapid.
API este pe http://api.ident.me/
Exemple:
curl ident.me
curl v4.ident.me
curl v6.ident.me
Ai putea folosi o cerere de DNS în loc de cerere HTTP pentru a afla IP-ul public:
$ dig +short myip.opendns.com @resolver1.opendns.com
Foloseste resolver1.opendns.com
server dns pentru a rezolva magic myip.opendns.com
hostname a ta adresa ip.
Amazon AWS
curl http://checkip.amazonaws.com
Eșantionul de ieșire:
123.123.123.123
Îmi place pentru că:
Tip în această exact, apăsați Enter unde este indicat:
telnet ipecho.net 80
Enter
IA /plain HTTP/1.1
Enter
GAZDĂ: ipecho.net
Enter
BROWSER: internet-kit`Enter
Enter
Acest manual prezintă o cerere HTTP, care va reveni IP-ul de la partea de jos de o HTTP/1.1 200 OK răspuns
Exemplu de ieșire:
$ 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
Pentru aceasta, STUN a fost inventat. Ca un client, puteți trimite o cerere la dispoziția publicului un STUN server și să-l dea înapoi adresa IP se vede. Un fel de nivel scăzut whatismyip.com ca nu foloseste HTTP și nici inteligent artizanale serverele DNS dar extraordinar de rapid ASOMAREA protocol.
stunclient
Dacă aveți stunclientinstalat (de
apt-get install cascador-client` pe debian/ubuntu), puteți face pur și simplu:
$stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
în cazul în care A. B. C. Deste adresa IP a aparatului dumneavoastră pe rețeaua locală și
W. X. Y. Zeste adresa IP servere ca site-urile vedea din exterior (și pe care o cauti). Folosind
sed` puteți reduce producția de mai sus pentru doar o adresă IP:
stunclient stun.services.mozilla.com |
sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"
Cu toate acestea, întrebarea era cum să-l găsească, folosind linia de comandă, care ar putea exclude folosind un STUN client. Așa că mă întreb...
bash
Un STUN cerere pot fi realizate manual, trimis la o sursă externă de STUN server folosind netcatși fi post-procesate cu
dd,
hexdump " și " sed` astfel:
$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/'
Ecoul definește un binar ASOMAREA cerere (0x0001 indică Obligatoriu Cerere) având o lungime de 8 (0x0008) cu cookie 0xc00cee și lipite unele chestii de la wireshark. Doar patru octeți reprezentând IP externă sunt luate de răspuns, curățate și tipărite.
De lucru, dar nu este recomandat pentru utilizarea în producție :-)
P. S. Multe servere STUN sunt disponibile, deoarece este o tehnologie de bază pentru SIP și WebRTC. Folosind unul din Browser ar trebui să fie sigur de confidențialitate-înțelept, dar ai putea folosi, de asemenea, un alt: STUN server list
Pentru cei dintre noi cu autentificare acces la routere, folosind un script pentru a cere router ce sa' adresa IP WAN este este cel mai eficient mod de a determina adresa IP externă. De exemplu, următoarele python script afiseaza IP-ul extern pentru Medialink MWN-WAPR300N router:
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)
Rețineți că acest lucru nu este foarte sigur (cum este cazul cu plaintext acreditările & exploatarea în cele mai multe routere), și cu siguranță nu este portabil (nu trebuie să fie schimbat pentru fiecare router). Cu toate acestea, este foarte rapid și perfect rezonabilă soluție pe un fizic securizat rețeaua de domiciliu.
Pentru a personaliza script-ul pentru un alt router, vă recomandăm utilizarea tamperdata addon la firefox pentru a determina ce cereri HTTP pentru a face.
ifconfig
sau mai scurte de ieșire:
ifconfig | grep inet
de asemenea,
ip addr show
și, probabil:
hostname -I
wget http://smart-ip.net/myip -O - -q ; echo
N. B. Dacă nu't mintea la instalarea curl
, asta la fel de bine:
curl http://smart-ip.net/myip
Multe routere pot fi interogate prin UPnP:
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
Apoi, grep adresa ip de răspuns.
grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
Dacă utilizați DD-WRT atunci acest lucru funcționează pentru mine:
curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
sau
curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print $2}'
În cazul în care 192.168.1.1 este Poarta de acces/Router Adresa IP LAN a router DD-WRT.
La -s componenta mijloace silențios (de exemplu, don't show curl informații de progres).
Oh, trebuie să menționez că eu folosesc de mai sus cu "DD-WRT v24-sp2 (01/04/15) std".
Poate sunt un pic mai târziu, dar inxi poate face destul de ușor.
Instala inxi
sudo apt install inxi
Apoi executați următoarea comandă
inxi -i
Exemplu cu informațiile mele blocat folosind " z " opțiune pentru a copia și lipi la site-uri de genul asta:
~$ 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
În cazul în care se spune <filter>
e unde WAN IP, IPv4, adresa MAC, etc va apărea