Як знайти свою внутрішню IP-адресу?


208

У мене встановлений сервер Ubuntu 12.04, тому у мене немає графічного інтерфейсу. Коли я виконую команду ifconfig, я не можу знайти свою internl ip адресу. У ньому написано inet addr: 127.0.0.1.

Ось результат 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)

ось вміст тощо / мережі / інтерфейсів:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Якщо хтось міг би відредагувати це для мене, вміст тощо / мережі / інтерфейсів має бути окремим рядком.

Вихід хоста askubuntu.com був:

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

Я створив owncloud та webmin кілька місяців тому і користувався ними протягом місяця без проблем. Я думаю, що потужність вимкнулася один день 2 місяці тому, і я ніколи не вмикав сервер до вчорашнього дня. Я нічого не робив, що вплинуло б на налаштування Інтернету. Тому я не впевнений, чому це більше не працює. Що стосується моєї мережевої топології, у мене є мережна карта pci-e для ПК. Лінія Ethernet йде від мережевої карти до комутатора, а потім до модема / маршрутизатора.


1
@AvatarParto Це стосується інтерфейсів, що стикаються з загальнодоступним доступом, це питання стосується внутрішніх мереж ...
Бруно Перейра

З цікавості, що /etc/network/interfacesв ньому є?
Powerlord

Я знаю, як використовувати команду каталогу змін, але я не знаю, як перерахувати файли колись там, як би це зробити?
Cam Jones

lsвідобразить файли в каталозі. ls -lдасть детальний перелік. Для того, щоб перерахувати вміст певного каталогу ls -l /etc/network. Щоб змінити каталог і перелічити вміст cd /etc/network ;ls -l. Щоб прочитати вміст etc/network/interfaces(це файл) sudo pico /etc/network/interfaces. ( picoце легкий текстовий редактор - підходить для читання та основного редагування та менш залякує, ніж vi.)
douggro

Відповіді:


205

Ці команди повідомлять вам всю інформацію про мережу

ip add

або

ifconfig -a

Якщо, як ви говорите, це дає лише 127.0.0.1, то є два варіанти:

  1. Ваша мережна карта не приєднана або не розпізнана системою

  2. Ваш мережевий сервер DHCP не працює або не підключений


коли я входжу в систему, мені кажуть, що є кілька оновлень або оновлень, тому я припускаю, що він повинен поговорити з офіційним веб-сайтом ubuntu, щоб знати, що він має оновлення, тому я думаю, що мій Інтернет працює.
Cam Jones

@Skateguy спробуйте відкрити askubuntu.com і будь-ласка, надрукуйте всі ifconfig -a
kamil

У мене немає графічного інтерфейсу, я все-таки збираюся його набрати.
Cam Jones

1
Як я можу відповісти на питання, які ставлять два варіанти?
Cam Jones

1
Я б запропонував спочаткуip варіант , а потім ( застарілий ) згодом. ifconfig
Кампанія

212
hostname -I

Це дасть вам лише ip-адресу без додаткової інформації.


16
Це ідеально. Стільки надмірно складних (але непоганих) відповідей .. цей просто мертвий простий.
користувач1003916

3
Ідеальна відповідь .. :)
john400

2
Відповідно до сторінки man: `-I, --all-ip-адреси Показати всі мережеві адреси хоста. Цей параметр перераховує всі налаштовані адреси у всіх мережевих інтерфейсах. Інтерфейс зворотного зв'язку та локальні адреси IPv6 посилань опущені. У моєму випадку він дає дві адреси, тому що у мене lxd: 192.168.0.78 та 10.0.3.1
Сергій Колодяжний

6
Так. У моєму випадку це гірше, 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.1тому що я запускаю кілька контейнерів Docker;)
Алекс

4
Оновлення, оскільки інші рішення не працюють, наприклад, на зображенні
raw docker

185

Це я зараз рекомендую:

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

Перевагою цієї команди є те, що вам не потрібно знати, який інтерфейс ви використовуєте (eth0? Eth1? Або, можливо, wlan0?), Вам не доведеться фільтрувати адреси localhost, Docker адреси, VPN-тунелі тощо. і ви завжди отримаєте IP-адресу, яка використовується в даний час для підключення до Інтернету в той самий момент (важливо, коли, наприклад, ви підключені як через Ethernet, так і через Wi-Fi або через VPN тощо).

Це дозволить перевірити не тільки те, що у вас встановлений правильний IP-адрес, налаштований на деякому інтерфейсі (наприклад, при розборі результатів ifconfig), але і у тому, що у вас таблиця маршрутизації налаштована для правильного його використання.

Я знайшов цю ідею в цій відповіді по Коллін Андерсон .

Я використовую його у сценарії internalip у своїй колекції скриптів на GitHub , яку ви можете встановити за допомогою:

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

і використовувати як:

internalip

або:

internalip TARGET

і ви отримаєте свою IP-адресу, яка використовуватиметься для з'єднання з TARGET IP-адресою . Ціль за замовчуванням - 8.8.8.8це загальнодоступна розв'язувальна програма DNS Google і хороша за замовчуванням для Інтернету.

Але якщо ви запускаєте його з іншим IP:

internalip 127.2.3.4

Тоді ви отримаєте:

127.0.0.1

тому що це ваша IP-адреса, яка використовувалася б для з'єднання з 127.2.3.4 в інтерфейсі зворотного зв'язку. Це корисно, коли ваша мета знаходиться в локальній мережі, VPN або іншій спеціальній мережі, і в цьому випадку для підключення до Інтернету може використовуватися інша IP-адреса, ніж IP за замовчуванням.

Зовнішній IP

Щоб перевірити вашу зовнішню IP-адресу (ту, яку бачать сервери в Інтернеті під час підключення до них - яка може відрізнятися від описаної тут внутрішньої IP-адреси), дивіться цю відповідь .


1
це приголомшлива відповідь, дякую! врятував мене стільки головного болю! : D
користувач65165

Це корисна хитрість, але ОП запитували про внутрішній ІС, тож не можна вважати, що це маршрутизація до 8.8.8.8.
mc0e

@ mc0e Добре. Ось чому мій сценарій бере необов’язковий аргумент для якогось іншого IP - 8.8.8.8це просто за замовчуванням. У своїй відповіді я використовував 127.2.3.4як приклад. Ви можете використовувати деякі IP-адреси у вашій інтрамережі або через VPN. Справа в тому, що у вас зазвичай немає однієї внутрішньої IP-адреси, але мало різних адрес, які використовуються для різних цілей. Таким чином ви зможете знайти той, який фактично використовується для підключення до заданої цілі.
rsp

1
Просто ви знаєте, це дає зовнішній IP на Mac.
OZZIE

19

Я вважаю, що варто згадати, що запуск ifconfig разом із опцією -a відображатиме всі інтерфейси вільніше чи ні в інтерфейсі є IP.

запускаючи ifconfig тільки, відображатиметься лише інтерфейси з призначеними IP-адресами.

Ось приємний трюк, який можна використовувати для відображення лише IP-адрес за допомогою Perl.

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

Система розпізнає вашу мережеву карту, тому її відображаються eth0 та eth1

ось швидкий спосіб призначити IP для вашого інтерфейсу, відповідно використовувати справжню IP / підмережу.

 ifconfig eth0 192.168.1.200/24 up 

тоді нам потрібно додати маршрут за замовчуванням

route add default gw 192.168.1.1

Найкраще,


1
Я б спробував цей метод, але вам доведеться трохи більше його розбити, щоб зрозуміти, як у тому, як знайти чи знати дійсний IP, підмережу та дійсний маршрут за замовчуванням.
Cam Jones

це статичне призначення IP для вашого мережевого інтерфейсу, тобто якщо ви знаходитесь за маршрутизатором з підмережею 192.168.1.0/24, тоді ви можете пінг-версію ip ex. 192.168.1.200, і якщо ви не отримали відповіді, перейдіть до голови та скористайтеся ifconfig interface_name IP_ADDRESS / MASK up Ваш Gw за замовчуванням потрібно додати після призначення IP-адреси.
користувач1007727

8

Ця команда покаже всі IP-адреси для одного пристрою:

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

Він надрукує один-два рядки виводу. Перший - це адреса inet / IPv4, а другий - inet6 / IPv6, якщо ваша система налаштована на підтримку цього.


6

У випадку, якщо ifconfigкоманда не відображала IP-адресу, існує дуже простий і простий спосіб дізнатися IP-адресу машини Ubuntu через GUI. Виконайте наведені нижче дії:

Клацніть піктограму мережі в області сповіщень та натисніть Інформація про з'єднання . Параметри піктограм мережі

Це відкриває вікно, яке містить деяку інформацію, включаючи IP-адресу. Інформація про IP-адресу


1

Тут вже можна вибрати багато хороших відповідей, але я подумав, що я зазначу недоліки, які зазвичай, але не обов'язково використовуються з маріонеткою для збору різних фактів про систему. Основна перевага facter є те , що вона дає хороший чистий вихід , який економить вам все маніпуляції з grep, sed, awk, cut, perlі т.д. Це не збирається сказати вам , який інтерфейс ви зацікавлені, але якщо ви знаєте , що, то нижче дає вам IP без іншого супроводу для очищення:

facter ipaddress_eth0 

1

команда ip

Ось варіант у ip addrшляху.

ipмає -oопцію, яка дозволяє розміщувати всю інформацію в одному рядку - це корисно для розбору інструментів типу awkабо perl. У поєднанні з -4опцією ми бачимо лише адреси IPv4. Таким чином, вихід буде приблизно таким (зауважте - замініть wlan7 інтерфейсом, який ви хочете перевірити):

$ 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

Як бачите, IP-адреса - це четвертий стовпець / слово у висновку. Решта - це простий розбір за допомогою інструменту на ваш вибір. Тут я використовую python:

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

Те саме, тільки з <<<підстановкою рядків та команд$()

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

Особисто у мене це збережене як приємна функція в моєму ~/.bashrcтому меншому наборі тексту.

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

Версія Perl і Ruby трохи коротша:

$ 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

Якщо ви знайомі з використанням інструментів мережевого аналізу, ви, мабуть, знаєте, що для отримання вашої ip-адреси потрібно лише очистити кеш браузера, запустити захоплення Wireshark на певному інтерфейсі та шукати GETпередачу пакетів http . У стовпчику призначення буде вказана ваша ip-адреса

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.