Jak mogę znaleźć mój wewnętrzny adres IP?

208

Mam zainstalowany serwer Ubuntu 12.04, więc nie mam GUI. Kiedy wykonam polecenie ifconfig, nie mogę znaleźć mojego wewnętrznego adresu IP. Mówi inet addr: 127.0.0.1.

Oto wynik ifconfig -a:

eth0   link encap:Ethernet  HWaddr 00:06:4f:4a:66:f0
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1   link encap:Ethernet  HWaddr 00:16:ec:05:c8:9c 
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo     Link encap:Local Loopback
    inet addr 127.0.0.1  Mask:255.0.0.0
    inet6 addr:  ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:65536  Metric:1
    RX packets:1800 errors:0 dropped:0 overruns:0 frame:0
    Tx packets:1800 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:143896 (143.b KB)  TX bytes:143896 (143.8 KB)

oto zawartość etc / network / interfaces:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Jeśli ktoś mógłby to dla mnie edytować, zawartość etc / network / interfaces powinna znajdować się w osobnych wierszach.

Dane wyjściowe hosta askubuntu.com to:

;; connection timed out; no servers could be reached.

Kilka miesięcy temu utworzyłem własną chmurę i webmin i korzystałem z nich przez miesiąc bez żadnych problemów. Myślę, że zasilanie wyłączyło się 2 dni temu i nigdy nie włączyłem serwera aż do wczoraj. Nie zrobiłem nic, co wpłynęłoby na konfigurację Internetu, więc nie jestem pewien, dlaczego to już nie działa. Jeśli chodzi o moją topologię sieci, mam kartę sieciową pci-e na PC. Linia Ethernet przechodzi z karty sieciowej do przełącznika, a następnie stamtąd do modemu / routera.

Cam Jones
źródło
1
@AvatarParto Są to interfejsy z dostępem publicznym, to pytanie dotyczy sieci wewnętrznych ...
Bruno Pereira
Co ciekawego ma z ciekawości /etc/network/interfaces?
Władca,
Wiem, jak korzystać z polecenia zmiany katalogu, ale nie wiem, jak wyświetlić listę plików, jak to zrobić?
Cam Jones,
lswyświetli listę plików w katalogu. ls -lpoda szczegółową listę. Aby wyświetlić zawartość danego katalogu ls -l /etc/network. Aby przejść do katalogu i zawartości listy cd /etc/network ;ls -l. Aby przeczytać zawartość etc/network/interfaces(jest to plik) sudo pico /etc/network/interfaces. ( picojest lekkim edytorem tekstu - dobrym do czytania i podstawowej edycji oraz mniej onieśmielającym niż vi.)
douggro

Odpowiedzi:

205

Te polecenia pokażą wszystkie informacje o sieci

ip add

lub

ifconfig -a

Jeśli, jak mówisz, daje tylko 127.0.0.1, to są dwie opcje:

  1. Twoja karta sieciowa nie jest podłączona lub nie jest rozpoznawana przez system

  2. Twój sieciowy serwer DHCP nie działa lub nie jest podłączony

Kamil
źródło
kiedy się loguję, mówi mi, że jest kilka aktualizacji lub aktualizacji, więc zakładam, że musi porozmawiać z oficjalną stroną ubuntu, aby wiedzieć, że ma aktualizacje, więc myślę, że mój internet działa.
Cam Jones,
@Skateguy spróbuj otworzyć askubuntu.com i wydrukuj wszystkie ifconfig -a
kamil
Nie mam GUI, ale zaraz go wypiszę.
Cam Jones
1
Jak mogę odpowiedzieć na pytania postawione przez dwie opcje?
Cam Jones,
1
Sugerowałbym najpierwip opcję , a potem ( przestarzałą ) później. ifconfig
Campa
212
hostname -I

To da ci tylko adres IP bez żadnych dodatkowych informacji.

Sarath Somana
źródło
16
To idealne. Tak wiele zbyt skomplikowanych (ale nie złych) odpowiedzi .. ta jest po prostu bardzo prosta.
user1003916
3
Idealna odpowiedź .. :)
john 400
2
Według strony podręcznika: `-I, --all-ip-address 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. Dzięki temu otrzymasz adres IP w sieci, do której jesteś podłączony, ale także adres IP twojego komputera, jeśli używasz go jako serwera ethernet lub lxd. W moim przypadku podaje dwa adresy, ponieważ mam lxd: 192.168.0.78 i 10.0.3.1
Sergiy Kolodyazhnyy
6
Tak. W moim przypadku jest to gorsze, 10.0.2.15 172.18.0.1 172.17.0.1 172.20.0.1 172.21.0.1 172.22.0.1 172.19.0.1ponieważ korzystam z niektórych kontenerów Docker;)
Alex
4
Głosuj, ponieważ inne rozwiązania nie działają, np. Na surowym obrazie ubuntu
dokera
185

Oto, co obecnie polecam:

ip route get 8.8.8.8 | awk '{print $NF; exit}'

Zaletą tego polecenia jest to, że nie musisz wiedzieć, którego interfejsu używasz (eth0? Eth1? A może wlan0?), Nie musisz odfiltrowywać adresów hosta lokalnego, adresów dokerów, tuneli VPN itp. i zawsze otrzymasz adres IP, który jest aktualnie używany do połączeń internetowych w tym momencie (ważne, gdy np. masz połączenie zarówno z siecią Ethernet, jak i Wi-Fi lub przez VPN itp.).

To przetestuje nie tylko to, czy masz poprawny adres IP skonfigurowany na jakimś interfejsie (np. Z analizowaniem danych wyjściowych ifconfig), ale także, czy masz skonfigurowaną tabelę routingu, aby używać go poprawnie.

Uważam, że pomysł w tej odpowiedzi przez Collin Anderson .

Używam go w skrypcie Internalip w mojej kolekcji skryptów na GitHub , którą możesz zainstalować za pomocą:

wget https://rawgit.com/rsp/scripts/master/internalip
chmod a+x internalip

i użyj jako:

internalip

lub:

internalip TARGET

a otrzymasz adres IP, który byłby używany do łączenia się z adresem IP TARGET . Domyślnym celem jest 8.8.8.8co jest rozpoznawania nazw DNS publicznej Google'a i dobry domyślny dla Internetu.

Ale jeśli uruchomisz go z innym adresem IP:

internalip 127.2.3.4

Otrzymasz wtedy:

127.0.0.1

ponieważ to jest twój adres IP, który byłby używany do połączenia z 127.2.3.4 na interfejsie pętli zwrotnej. Jest to przydatne, gdy twój cel znajduje się w sieci LAN, VPN lub innej specjalnej sieci, w którym to przypadku do połączenia z Internetem można użyć innego adresu IP niż domyślny adres IP.

Zewnętrzny adres IP

Aby sprawdzić swój zewnętrzny adres IP (ten, który widzą serwery w Internecie podczas łączenia się z nimi - który może być inny niż opisany tutaj wewnętrzny adres IP), zapoznaj się z tą odpowiedzią .

rsp
źródło
1
to niesamowita odpowiedź, dzięki! zaoszczędził mi tyle bólu głowy! : D
user65165,
Jest to użyteczna sztuczka, ale OP pytał o wewnętrzny adres IP, więc nie można być pewnym, że można routować do wersji 8.8.8.8.
mc0e
@ mc0e Dobry punkt. Dlatego mój skrypt przyjmuje opcjonalny argument dla innego adresu IP - 8.8.8.8jest to tylko domyślny. W mojej odpowiedzi posłużyłem 127.2.3.4jako przykład. Możesz użyć również adresu IP w intranecie lub sieci VPN. Chodzi o to, że zwykle nie masz jednego wewnętrznego adresu IP, ale kilka różnych adresów używanych do różnych celów. W ten sposób możesz znaleźć ten, który jest faktycznie używany do połączeń z danym celem.
rsp
1
Właśnie dlatego wiesz, że daje to zewnętrzny adres IP na komputerze Mac.
OZZIE
19

Myślę, że warto wspomnieć, że uruchomienie ifconfig wraz z opcją -a wyświetli wszystkie interfejsy bez względu na to, czy interfejs ma adres IP.

działający sam ifconfig, wyświetli tylko interfejsy z przypisanymi adresami IP.

Oto fajna sztuczka, której można użyć do wyświetlenia tylko adresów IP za pomocą Perla.

# ifconfig | perl -nle'/dr:(\S+)/ && print $1'
192.168.1.100
127.0.0.1

Twoja karta sieciowa jest rozpoznawana przez system, dlatego pokazuje et0 i eth1

Oto szybki sposób przypisania adresu IP do interfejsu, odpowiednio użyj prawidłowego adresu IP / podsieci.

 ifconfig eth0 192.168.1.200/24 up 

następnie musimy dodać domyślną trasę

route add default gw 192.168.1.1

Najlepsza,

użytkownik1007727
źródło
1
Chciałbym wypróbować tę metodę, ale będziesz musiał ją nieco bardziej rozbić, aby ją zrozumieć, tak jak w przypadku znalezienia lub poznania prawidłowego adresu IP, podsieci i prawidłowej domyślnej trasy.
Cam Jones
jest to statyczne przypisanie IP do interfejsu sieciowego, co oznacza, że ​​jeśli jesteś za routerem z podsiecią 192.168.1.0/24, możesz pingować ip ip ex. 192.168.1.200, a jeśli nie dostaniesz odpowiedzi, idź głową i użyj ifconfig nazwa_interfejsu ADRES IP / MASKA w górę Twój domyślny gw musi zostać dodany po przypisaniu IP.
user1007727,
8

To polecenie pokaże wszystkie adresy IP dla pojedynczego urządzenia:

dev=eth0
ip addr show $dev | awk '/inet/ {print $2}' | cut -d/ -f1

Wydrukuje jeden lub dwa wiersze wyniku. Pierwszy to adres inet / IPv4, a drugi to inet6 / IPv6, jeśli system jest skonfigurowany do obsługi tego.

Aaron Digulla
źródło
6

W przypadku, gdy ifconfigpolecenie nie wyświetlało adresu IP, istnieje bardzo prosty i łatwy sposób na znalezienie adresu IP maszyny Ubuntu poprzez GUI. Wykonaj poniższe kroki:

Kliknij ikonę sieci w obszarze powiadomień, a następnie kliknij Informacje o połączeniu . Opcje ikon sieciowych

Spowoduje to wyświetlenie okna zawierającego pewne informacje, w tym adres IP. Informacje o adresie IP

Ibungo
źródło
1

Istnieje już wiele dobrych odpowiedzi do wyboru, ale pomyślałem, że zwrócę uwagę na faktor, który jest zwykle, ale niekoniecznie używany z marionetką do zbierania różnych faktów na temat systemu. Główną zaletą jest to, że facter daje ładne czyste wyjście, które oszczędza Ci wszystkie manipulacje z grep, sed, awk, cut, perl, itd. To jest nie powie ci, który interfejs jesteś zainteresowany, ale jeśli wiesz, że to następujące daje adres IP bez innych cruft do czyszczenia:

facter ipaddress_eth0 
Mc0e
źródło
1

polecenie ip

Oto jedna z odmian ip addr.

ipma -oopcję, która pozwala umieścić wszystkie informacje w jednym wierszu - jest to przydatne do analizowania za pomocą narzędzi takich jak awklub perl. W połączeniu z -4opcją zobaczymy tylko adresy IPv4. Zatem wynik byłby mniej więcej taki (uwaga - zamień wlan7 na interfejs, który chcesz sprawdzić):

$ ip -4 -o addr show wlan7
3: wlan7    inet 192.168.0.78/24 brd 192.168.0.255 scope global dynamic wlan7\       valid_lft 85654sec preferred_lft 85654sec

Jak widać, adres IP to 4. kolumna / słowo na wyjściu. Reszta to proste analizowanie za pomocą wybranego narzędzia. Tutaj używam Pythona:

ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 

To samo, tylko z tym <<<zastąpieniem ciągów i poleceń$()

python -c "import sys;print sys.stdin.readlines()[0].split()[3]"  <<< $(ip -4 -o addr show wlan7)

Osobiście mam to zapisane jako fajną funkcję w moim, ~/.bashrcwięc mniej pisania jest zrobione.

wlan_ip() {
    ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 
} 

Wersje Perla i Ruby są nieco krótsze:

$ ip -4 -o addr show  wlan7 | perl -lane 'print $F[3]'                         
192.168.0.78/24

$ ip  -4 -o addr show wlan7 | ruby -n -e 'print $_.split()[3]'                 
192.168.0.78/24

Wireshark

Jeśli znasz się na korzystaniu z narzędzi do analizy sieci, prawdopodobnie wiesz, że aby uzyskać adres IP, wystarczy wyczyścić pamięć podręczną przeglądarki, uruchomić przechwytywanie Wireshark na określonym interfejsie i poszukać GETprzesyłanych pakietów http . Kolumna docelowa pokaże twój adres IP

Sergiy Kolodyazhnyy
źródło