Как же узнать свой IP-адрес в Linux / MacOS / Unix-подобных
TL;DR - ваш IP-адрес: ....
let ipSpan = document.querySelector('#ip'); fetch('https://ipapi.co/json/').then((data) => { data.json().then(data => ipSpan.innerHTML = data.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
- это псевдо-интерфейс для того, чтобы приложение в
операционной системе могло общаться с другим на той же по "сети".
Соответственно, только один (вариант с несколькими также возможен, но скорее всего, это не ваш случай) из выведенных интерфейсов обращается в интернет.
Опять же воспользуемся командой 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.
Однако, не всё так просто. Это ваш локальный ip - он используется для адресации во внутренней сети. Как я это определил? Всё просто: есть диапазоны ip-адресов, которые используются только во внутренних локальных. Вот их краткий список:
Следующие диапазоны определены IANA как адреса, выделенные локальным сетям:
– первые 2 диапазона используются особо часто.
Однако, именно с этого адреса будут отсылаться данные. Но сайты, на которые мы пойдём увидят не их. Всё благодаря технологии NAT - подмены ip-адресов на хосте маршрутизатора.
Маршрутизатор получит данные от нас, изменят исходящий ip-адрес на свой и отправит дальше, а когда придёт ответ, всё заменит назад.
Это делается по 2-м причинам:
Поэтому, в общем случае, вы не можете узнать тот ip, который будет использоваться в интернете без использования внешних сервисов.
Ну а самый простой вариант узнать свой внешний IP-адрес – просто сходить на один из сайтов, которые как раз сделаны для этого.