Программы
Как узнать свой IP адрес в Linux, MacOS и других Unix-подобных

Как узнать свой IP адрес в Linux, MacOS и других Unix-подобных

Как же узнать свой IP-адрес в Linux / MacOS / Unix-подобных

TL;DR - ваш IP-адрес: ....

Теперь давайте подробнее разберёмся с этим!

Во-первых, раз уж нам нужен ip адрес, то стоит познакомиться с командой ip. В частности, для получения информации об имеющихся сетевых интерфейсах, а также их настройке, можно использовать команду ip addr или сокращённый вариант ip a:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet **127.0.0.1**/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

Команда ip довольно новая, не на всех системах она есть. Так, к примеру, на MacOS, FreeBSD или старых версиях Linux вместо команды ip можно использовать команду ifconfig:

$ ifconfig 
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	nd6 options=201<PERFORMNUD,DAD>

Соответственно, мы видим интерфейс lo, у которого настроен ip 127.0.0.1. Однако, там мы встретим отнюдь не один сетевой интерфейс. Например, этот самый lo - это псевдо-интерфейс для того, чтобы приложение в операционной системе могло общаться с другим на той же по "сети".

Соответственно, только один (вариант с несколькими также возможен, но скорее всего, это не ваш случай) из выведенных интерфейсов обращается в интернет.

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS

Как узнать, какой же сетевой интерфейс ходит в интернет

Опять же воспользуемся командой ip, но на этот раз используем параметр route - получим список настроенных маршрутов. Именно их использует операционная система при выборе, через что слать данные.

$ ip route
default via 10.111.88.11 dev ens192  proto static  metric 100 

Опять же в MacOS, FreeBSD или старых версиях Linux вместо команды ip можно использовать команду route:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.111.88.11    0.0.0.0         UG    100    0        0 ens192

– в большинстве случаев используется маршрут по умполчанию, или же default (также он пишется как 0.0.0.0). Таким образом мы видим, что используется ip 10.111.88.11.

Локальные адреса и NAT

Однако, не всё так просто. Это ваш локальный ip - он используется для адресации во внутренней сети. Как я это определил? Всё просто: есть диапазоны ip-адресов, которые используются только во внутренних локальных. Вот их краткий список:

Следующие диапазоны определены IANA как адреса, выделенные локальным сетям:

  • 10.0.0.0 — 10.255.255.255
  • 192.168.0.0 — 192.168.255.255
  • 100.64.0.0 — 100.127.255.255
  • 172.16.0.0 — 172.31.255.255

– первые 2 диапазона используются особо часто.

Однако, именно с этого адреса будут отсылаться данные. Но сайты, на которые мы пойдём увидят не их. Всё благодаря технологии NAT - подмены ip-адресов на хосте маршрутизатора.

nat

Маршрутизатор получит данные от нас, изменят исходящий ip-адрес на свой и отправит дальше, а когда придёт ответ, всё заменит назад.

Это делается по 2-м причинам:

  1. Количество IP-адресов версии 4 (которая сейчас наиболее распространена) ограничено. Более того, они закончились – теперь разве что арендовать или перекупать.
  2. Из соображений безопасности: снаружи никто не сможет к вам подключиться.

Поэтому, в общем случае, вы не можете узнать тот ip, который будет использоваться в интернете без использования внешних сервисов.

Ну а самый простой вариант узнать свой внешний IP-адрес – просто сходить на один из сайтов, которые как раз сделаны для этого.