Polecenie powłoki dotyczące uzyskiwania adresu IP?

Odpowiedzi:

32

/sbin/ifconfig -a

mpbloch
źródło
Tak, a jeśli planujesz zdalnie administrować serwerem, vi /etc/network/interfacesi ustaw interfejs na static(patrz help.ubuntu.com/8.10/serverguide/C/network-configuration.html )
gravyface
Uruchomienie tego polecenia ujawnia całą listę liczb. Z którego powinniśmy skorzystać? The inet addr?
ComputerScientist
25

Możesz użyć:

/bin/ip addr
Robert Swisher
źródło
3
@opierce Oznacziłeś odpowiedź mpbloch jako poprawną, ale jako FYI, powinieneś używać tej odpowiedzi, ponieważ jest to część pakietu iproute2. ifconfigjest teraz wprowadzany w fazę.
jwbensley,
3
Możesz to skrócić, po prostu uruchamiając ip a.
gak
19

Jeśli masz używany wewnętrzny adres, sprawdź

curl http://myip.dnsomatic.com

może być dobrym pomysłem na powłoki uniksowe.
Lub po prostu podłącz ten adres URL do przeglądarki.


Jeśli masz inną odpowiedź od „ ifconfig -a” efekcie dał swój adres wewnętrzny - co prawdopodobnie nie będzie pracy z zewnątrz.
ifconfig


Nawet jeśli wszystko wydaje się w porządku, możesz mieć zaporę ogniową, która uniemożliwia przychodzące połączenia ssh .
W którym momencie powinieneś wypróbować interesujący port z przeglądarki na komputerze w,

http://www.canyouseeme.org/

To potwierdzi łączność poprzez,

  • zewnętrzny adres IP (pokazujący go na tej stronie)
  • NAT, przekazywanie portów
  • Zapory ogniowe
nik
źródło
To prawda, ale w takim przypadku prawdopodobnie nie ma żadnych reguł NAT / Port Forwarding, aby dopasować ssh do dowolnego wewnętrznego adresu IP.
Kyle Brandt
@Kyle, które można dodać ...
nik
3
+1 zacurl http://myip.dnsomatic.com
JatSing
Podobnie jest teżcurl ifconfig.me
jwbensley,
19

/bin/hostname -i

James
źródło
3
W takim przypadku sugerowałbym użycie hostname --all-ip-addresses. Wyświetl wszystkie adresy sieciowe hosta. Ta opcja wylicza wszystkie skonfigurowane adresy we wszystkich interfejsach sieciowych. Interfejs pętli zwrotnej i adresy lokalne łącza IPv6 są pomijane. W przeciwieństwie do opcji -i, ta opcja nie zależy od rozpoznawania nazw. Nie przyjmuj żadnych założeń dotyczących kolejności danych wyjściowych.
lrkwz
5
Krótsza alternatywa dla komentarza @ lrkwz/bin/hostname -I
hanxue
Dzięki @hanxue - to powinna być odpowiedź sama w sobie - najkrótsze polecenie z najczystszym wyjściem - właśnie tego szukałem! Z mojego doświadczenia (Ubuntu) /bin/hostname -ipo prostu daje 127.0.1.1, co jest bezużyteczne.
Roger Dueck
9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Jeśli potrzebujesz adresu wewnętrznego, dodaj interfejs po ifconfig, np

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'
Johan
źródło
+1, to jest dokładnie to, co mi potrzebne, aby rozwiązać problem. Hurra dla jednowarstwowych!
J. Polfer
+1 Bez głowy -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice
Dzięki, działa na Debianie, ale na OS X nie działa, zwracając trochę śmieci. Byłoby wspaniale, gdybyśmy mogli wymyślić linię, która działa na oba. Oto dane wyjściowe ifconfig na OS X: gist.github.com/ssbarnea/5814657
sorin
3

Jeśli chcesz dowiedzieć się, jaki jest adres IP routera, możesz uruchomić to polecenie.

dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Jeśli używasz OpenDNS dla swojego serwera dns, możesz go skrócić do:

dig + short myip.opendns.com

Możesz także użyć tego polecenia.

curl http://myip.dnsomatic.com
Brad Gilbert
źródło
3

Jeśli masz wiele interfejsów, przydatne może być określenie, który z nich ma mieć adres IP. jeśli chcesz adres IPV4 interfejsu „eth0”:

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

jeśli chcesz adres IPV6 interfejsu „eth0”:

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

jeśli chcesz wyszukać adres IP między dwoma typowymi interfejsami laptopa, wlan0 i eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done
LoreLLo
źródło
3

Po prostu zwiń tę stronę :

$ curl wtfismyip.com/text

mansi
źródło
A jak dokładnie jest to lepsze od podobnych usług wspomnianych już w tych latach?
Esa Jokinen
2

Oto jeden wiersz, który działa również w systemie Linux i OS X i zwróci pierwszy adres, który nie jest lokalny:

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

Wyślij kredyty na /programming//a/13322549/99834

sorin
źródło
2
LOCAL_IP=`/bin/hostname -I | sed 's/ //g'`
Mohammed Saqib Rajput
źródło
1

Najłatwiej jest to zrobić

ifconfig eth0

zakładając, że urządzenie ma pojedynczy adres IP w domyślnym interfejsie przewodowym - może być potrzebne

ifconfig wlan0

jeśli jest na Wi-Fi.

David North
źródło
1
ip address show scope link

Pokaże ci adres IP mieszkania - ma łącza - interfejsy. Ale to nie jest komenda bash. Bash nie ma żadnej wiedzy o IP i sieci.

Saabi
źródło
1

Rozumiem, że chcesz podłączyć zdalną maszynę Ubuntu, która ma dynamiczny adres IP. Wejdź na stronę dyndns.org i otwórz bezpłatne konto. Następnie na zdalnej maszynie musisz zainstalować dynamiczne narzędzie ip.

sudo aptitude install dyndns-client

dzięki czemu możesz ssh zdalnej maszyny za pośrednictwem

ssh username@yourdynamicnamealias.dyndns.org

Po konfiguracji nigdy nie będziesz potrzebować adresu IP zdalnego komputera.

Rain Man
źródło
To moja preferowana metoda radzenia sobie z dynamicznymi adresami IP. dyndns.org to fantastyczna, bezpłatna usługa.
John Barrett,
1

Oto czego używam:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'
jlliagre
źródło
1

jeśli potrzebujesz tylko jednego adresu IP danego interfejsu, możesz:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 
DmitrySemenov
źródło
0

Jeśli szukasz publicznego adresu IP skrzynki , możesz użyć następujących opcji:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Możesz użyć dig(1)opcji takich jak -4lub, -6aby szukać adresu IPv4 lub IPv6; Google udzieli odpowiedzi w formie TXTtypu, która będzie zawierać cytaty, gdy zostaną przedstawione przez dig; jeśli chcesz później użyć zmiennej z narzędziami takimi jak traceroute, musisz użyć czegoś takiego jak tr (1), aby usunąć wspomniane cudzysłowy.

Inne opcje obejmują whoami.akamai.neti myip.opendns.com, które odpowiadają za pomocą Ai AAAAzapisuje (zamiast TXTjak w powyższym przykładzie od Google), więc nie wymagają usuwania cytatów:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Oto przykładowy skrypt, który wykorzystuje wszystkie powyższe opcje do ustawienia zmiennych:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Jeśli szukasz prywatnego adresu IP lub zestawu wszystkich adresów IP przypisanych do skrzynki, możesz użyć kombinacji ifconfig(na BSD i GNU / Linux), ip addr(na GNU / Linux), hostname(opcje -ii -Ina GNU / Linux) i netstatzobaczyć, co się dzieje.

cnst
źródło