LINUX.ORG.RU
решено ФорумAdmin

Подскажите надёжный способ определить свой локальный IP-адрес в скрипте

 , ,


1

2

Сабж. Нужно определить свой IP-адрес (и, хорошо бы, имя интерфейса), с которого машина выходит в интернет, т.е. который находится в одной подсети с шлюзом по-умолчанию.
Сделать это нужно внутри скрипта (т.е. не глазами посмотреть). Как надёжнее и правильнее всего?

★★★

Последнее исправление: gasinvein (всего исправлений: 3)

Ответ на: комментарий от Legioner

curl ifconfig.co

Прикольно, но ему нужен локальный, а не внешний.

ashot ★★★★
()

Подскажите надёжный способ ...

Что ты имеешь в виду, под словом «надежный». Универсальный/переносимый? Чтоб на разных системах одинаково работало?

ashot ★★★★
()
Ответ на: комментарий от Legioner

В линуксе всё делается парсингом выхлопа программ, на том он и стоит. Философия павершелла не прижилась. Поэтому только так, становись мастером авка и наслаждайся текстом. Популярные утилиты обычно свой выхлоп не меняют.

Просто вот бывают такие упёртые авторы утилит, которые занимаются извращением: вместо работы с кучей ключей для управлением входными параметрами и фиксации форматирования вывода изобретают «человекочитаемый» псевдоязык. Это я о «ip». Мир меняется, на моей памяти не сразу, но появились ключи форматирования у многих утилит, например у «find». Но ipconfig заменили ещё более извращенной хренью, если уж откровенно и не оглядываясь на авторитеты.

vodz ★★★★★
()
Ответ на: комментарий от vodz

во фряхах масштабно добавляли к утилитам выхлоп в машиночитаемом формате, вроде ключей «дай мне json».
но даже если бы ip умел выплёвывать json/xml/yaml проще бы не стало, т.к. сама формулировка ТСа «машина выходит в интернет» уже не универсальна.
как выходит? в какой интернет? прокси? разные автономные зоны? заблокированный гугл недоступным 8.8.8.8? и т.д и т.п.
даже можно представить как ТС такой: «чё не понятно? машина выходит в интернет. что может быть проще?»

system-root ★★★★★
()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от system-root

Задача ТСа имеет право на существование там, где вы знаете как настроена сеть на те машинах, где эта задача будет запускаться. То есть на сервере с кучей каналов это не годится, но зато на всех тысячах машин в конторе, где пользователю не дано прав менять простой конфиг сети - connected + default — вполне прокатит. Да и дома тоже.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от system-root

но даже если бы ip умел выплёвывать json/xml/yaml проще бы не стало, т.к. сама формулировка ТСа «машина выходит в интернет» уже не универсальна.

Как раз было бы проще, получив json/xml/yaml можно было бы вытянуть только нужные параметры не боясь что завтра добавят новое поле и парсинг сломается.

V1KT0P ★★
()
Ответ на: комментарий от rumgot

Не сталкивался. А зачем иметь два дефолт гетвея?

Такое бывает например когда используется ВПН.

Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
default         10.10.10.5      0.0.0.0         UG    50     0        0 tun0
default         192.168.1.1     0.0.0.0         UG    600    0        0 wlp1s0
10.10.10.1      10.10.10.5      255.255.255.255 UGH   50     0        0 tun0
10.10.10.5      *               255.255.255.255 UH    50     0        0 tun0
138.138.138.8   192.168.1.1     255.255.255.255 UGH   600    0        0 wlp1s0
192.168.1.0     *               255.255.255.0   U     600    0        0 wlp1s0
Это таблица построенная системой самостоятельно. В маршрутизацию ни кто не влазил.

AfterWork
()
Ответ на: комментарий от rumgot

А ну тогда по идее первый дефолт будет использоваться.

По идее да, но по факту оба. Причем стоять они могут в произвольном порядке в списке маршрутов. И в задаче ТСа это как раз и проблема. Надо понять куда и как идет пакет в инет чтобы понять с какого адреса он собственно уходит. А если ВПН-ов будет два? Ну в общем потому я и сказал что задача не тривиальная по крайней мере в тех данных что предоставил ТС.

AfterWork
()
Ответ на: комментарий от rumgot

Молодцом

Как правильно сказал один оч умный персонаж: «Зри в корень».

AfterWork
()
Ответ на: комментарий от Legioner

Тоже не знал про такой простой ресурс. Спасибо!

anc ★★★★★
()
Ответ на: комментарий от system-root

сама формулировка ТСа «машина выходит в интернет» уже не универсальна.
как выходит? в какой интернет? прокси? разные автономные зоны?

По-моему я вполне конкретно пояснил, разве нет?

IP-адрес ... который находится в одной подсети с шлюзом по-умолчанию

gasinvein ★★★
() автор топика
Ответ на: комментарий от gasinvein

в курсе про такие вещи?

default 
	nexthop via a.b.c.d dev eth1 weight 1 
	nexthop via e.f.g.h dev eth2 weight 2 
...

в обычном случае с ipv4

ip ro get `ip ro ls |grep «^default » |grep -oP «\d+\.\d+\.\d+\.\d+»` |grep -oP «src \d+\.\d+\.\d+\.\d+» |grep -oP «\d+\.\d+\.\d+\.\d+»

anonymous
()
Ответ на: комментарий от anonymous

Выше писал, что не рассматриваю ситуацию с несколькими шлюзами, и уж тем более с policy-based маршрутизацией.

gasinvein ★★★
() автор топика
Ответ на: комментарий от gear

hostname -I

Это сработает если у тебя поднят только один адрес. Даже для ноута со статикой на eth для экспериментов и подключённым wifi уже будет бардак, ибо оно даже имя интерфейса не пишет. hostname -i тоже сильно не универсально.

Stanson ★★★★★
()
Ответ на: комментарий от vodz

Просто вот бывают такие упёртые авторы утилит, которые занимаются извращением: вместо работы с кучей ключей для управлением входными параметрами и фиксации форматирования вывода изобретают «человекочитаемый» псевдоязык. Это я о «ip».

Насчёт ip/tc - это просто Кузнецов поклоняется(поклонялся?) Циске. Вот ip/tc и получились такими цискообразными и многословными.

Stanson ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.