Как мне найти свой внутренний IP-адрес?

208

У меня установлен сервер Ubuntu 12.04, поэтому у меня нет графического интерфейса. Когда я выполняю команду ifconfig, я не могу найти свой внутренний 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)

вот содержимое файла etc / network / interfaces:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Если бы кто-то мог отредактировать это для меня, содержимое etc / network / interfaces должно быть в отдельных строках.

Вывод хоста askubuntu.com был:

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

Я установил owncloud и webmin несколько месяцев назад и использовал их в течение месяца без проблем. Я думаю, что питание отключилось один день 2 месяца назад, и я никогда не включал сервер до вчерашнего дня. Я не сделал ничего такого, что могло бы повлиять на настройку Интернета, поэтому я не уверен, почему он больше не работает. Что касается топологии моей сети, у меня есть сетевая карта pci-e для ПК. Линия Ethernet идет от сетевой карты к коммутатору, а затем оттуда к модему / маршрутизатору.

Кэм Джонс
источник
1
@AvatarParto Это для интерфейсов, с которыми общедоступный доступ, этот вопрос о внутренних сетях ...
Бруно Перейра
Из любопытства, что /etc/network/interfacesв нем есть?
Powerlord
Я знаю, как использовать команду изменения каталога, но я не знаю, как отобразить список файлов, как мне это сделать?
Кэм Джонс
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, чтобы узнать, что у него есть обновления, так что я думаю, что мой интернет работает.
Кэм Джонс
@Skateguy попробуйте открыть askubuntu.com и распечатайте все ifconfig -a
kamil
У меня нет GUI, я собираюсь напечатать его, хотя.
Кэм Джонс
1
Как я могу ответить на вопросы, которые задают ваши два варианта?
Кэм Джонс
1
Я бы предложил сначала этот ipвариант , а затем ( устарел ) . ifconfig
Кампа
213
hostname -I

Это даст вам просто IP-адрес без какой-либо дополнительной информации.

Сарат Сомана
источник
16
Отлично. Так много слишком сложных (но не плохих) ответов ... этот просто чертовски простой.
user1003916
3
Идеальный ответ .. :)
john400
2
В соответствии с man-страницей: `-I, --all-ip-address Показать все сетевые адреса хоста. Эта опция перечисляет все настроенные адреса на всех сетевых интерфейсах. Интерфейс обратной связи и локальные IPv6-адреса ссылок опущены. Таким образом, это даст вам IP-адрес в сети, к которой вы подключены, а также IP-адрес вашего компьютера, если вы используете его в качестве сервера Ethernet или LXD. В моем случае это дает два адреса, потому что у меня есть 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;)
Alex
4
Upvote, потому что другие решения не работают, например, на необработанном образе Ubuntu для необработанного докера
noonex
185

Это то, что я сейчас рекомендую:

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

Преимущество этой команды в том, что вам не нужно знать, какой интерфейс вы используете (eth0? Eth1? Или, может быть, wlan0?), Вам не нужно фильтровать адреса локального хоста, адреса 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-адрес, который будет использоваться для соединения с IP-адресом TARGET . Цель по умолчанию , 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-адреса), посмотрите этот ответ .

RSP
источник
1
это отличный ответ, спасибо! спас мне столько головной боли! : D
user65165
Это полезный трюк, но ОП спрашивал о внутреннем IP-адресе, поэтому не стоит опасаться, что он маршрутизируется до 8.8.8.8.
mc0e
@ mc0e Хорошая мысль. Вот почему мой сценарий принимает необязательный аргумент для какого-то другого IP - 8.8.8.8это просто значение по умолчанию. В своем ответе я использовал 127.2.3.4в качестве примера. Вы также можете использовать некоторые IP-адреса в своей внутренней сети или в VPN. Дело в том, что у вас обычно не один внутренний IP-адрес, а несколько разных адресов, используемых для разных целей. Таким образом, вы можете найти тот, который на самом деле используется для соединений с данной целью.
rsp
1
Просто чтобы вы знали, это дает внешний IP на Mac.
Оззи
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

Лучший,

user1007727
источник
1
Я бы попробовал этот метод, но вам придется немного разбить его, чтобы я понял, как найти или узнать действительный IP-адрес, подсеть и действительный маршрут по умолчанию.
Кэм Джонс
это статическое назначение IP для вашего сетевого интерфейса, то есть если вы находитесь за маршрутизатором с подсетью 192.168.1.0/24, то вы можете пропинговать ip ex. 192.168.1.200 и, если вы не получили ответа, тогда идите в голову и используйте ifconfig имя_интерфейса IP_ADDRESS / MASK up Ваш gw по умолчанию должен быть добавлен после назначения IP.
user1007727
8

Эта команда покажет все IP-адреса для одного устройства:

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

Он напечатает одну или две строки вывода. Первый - это адрес inet / IPv4, а другой - inet6 / IPv6, если ваша система настроена для поддержки этого.

Аарон Дигулла
источник
6

В случае, если ifconfigкоманда не отображала IP-адрес, существует очень простой и легкий способ узнать IP-адрес компьютера с Ubuntu через графический интерфейс. Следуйте инструкциям ниже:

Нажмите значок сети в области уведомлений и нажмите Информация о соединении . Варианты значков сети

Это вызывает окно, в котором есть некоторая информация, включая IP-адрес. Информация об IP-адресе

Ibungo
источник
1

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

facter ipaddress_eth0 
mc0e
источник
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-адрес - это 4-й столбец / слово в выводе. Остальное - простое упражнение по разбору с помощью инструмента по вашему выбору. Здесь я использую 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 на определенном интерфейсе и посмотреть, какие HTTP- GETпакеты передаются. В столбце назначения будет показан ваш IP-адрес

Сергей Колодяжный
источник