Есть ли способ найти свой динамический публичный ip-адрес с помощью cli в Debian? [duplicate]

Запись в POSIX о « Генерация и доставка сигналов » в «Обосновании: Общая информация о системных интерфейсах» говорит

Сигналы, сгенерированные для процесса, доставляются только один поток. Таким образом, если более одного потока могут принимать сигнал, следует выбрать один. Выбор потоков полностью оставлен на усмотрение реализации как для обеспечения максимально широкого диапазона соответствующих реализаций, так и для предоставления реализациям свободы доставлять сигнал в «самый простой из возможных» потоков в случае различий в простоте доставки между различными потоками.

Из руководства signal (7) в системе Linux:

Сигнал может быть сгенерирован (и, таким образом, ожидает обработки) для процесса в целом (например, при отправке с использованием kill (2) ) или для определенного потока (например, определенные сигналы , такие как SIGSEGV и SIGFPE, сгенерированные как следствие выполнения конкретной инструкции на машинном языке, являются потоками, как и сигналы , нацеленные на конкретный поток с использованием pthread_kill (3) ). Сигнал, управляемый процессом, может быть доставлен в любой из потоков, который в настоящее время не заблокировал сигнал. Если более чем один из потоков имеет разблокированный сигнал , тогда ядро ​​выбирает произвольный поток, которому доставляет сигнал.

И в pthreads (7) :

Потоки имеют различные настройки альтернативного стека сигналов. Однако настройки альтернативного стека сигналов нового потока копируются из потока, который его создал, так что потоки изначально совместно используют стек альтернативных сигналов (исправлено в ядре 2.6.16). ).

Из руководства pthreads (3) в системе OpenBSD (как пример альтернативного подхода):

Обработчики сигналов обычно запускаются в стеке выполняющегося в данный момент нить.

(в настоящее время я не знаю, как это обрабатывается, когда несколько потоков выполняются одновременно на многопроцессорной машине)

Более старая реализация LinuxThread потоков POSIX позволяла использовать сигналы только для отдельных отдельных потоков. Из pthreads (7) в системе Linux:

LinuxThreads не поддерживает понятие сигналов, управляемых процессом: сигналы могут отправляться только определенным потокам.

5
12.05.2017, 15:43
4 ответа

В дополнение к ответу Тони о запросе OpenDNS, который я использую в своих сценариях при входе на мои серверы, чтобы отображать как локальную машину, так и удаленную публичный IP-адрес:

echo `hostname` `hostname -i` `dig +short +time=1 myip.opendns.com @resolver1.opendns.com`

Google также предлагает аналогичную услугу.

dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'

Если у вас есть частный IP-адрес за домашним или корпоративным маршрутизатором / инфраструктурой, или даже если вы являетесь своим собственным маршрутизатором, эти службы в Интернете покажут общедоступный IP-адрес, который вы используете для доступа к ним, как это то, что приходит к ним, выполняя запрос.

Обратите внимание, что вышеуказанные методы работают только в том случае, если рассматриваемая машина Linux имеет прямой доступ к Интернету .

Если ваш Linux-сервер является вашим маршрутизатором, вы можете не только посмотреть на свои текущие интерфейсы, но и сделать следующее:

hostname -i

Как правило, публичный IP-адрес часто является основным / первым интерфейсом. Если не первый интерфейс, вы также можете сделать:

$hostname -I
95.xx.xx.xxx 192.168.202.1 192.168.201.1 

Который показывает вам все IP-адреса машинных интерфейсов.

Прочтите также:

Как найти мой общедоступный IP-адрес из командной строки в Linux

Опять же, если сервер Linux является маршрутизатором, может быть интересно разместить сценарий в / и т. Д. /dhcp/dhclient-exit-hooks.d, чтобы отслеживать и реагировать на изменения вашего IP-адреса, как я задокументировал в этом вопросе:

Лучший способ действовать при изменении IP-адреса от провайдера?

9
27.01.2020, 20:32

Ваша система не знает этот IP-адрес, поэтому вам нужно будет запросить что-то внешнее по отношению к системе. Поскольку ваш маршрутизатор знает, что может предлагать такую ​​услугу, я не знаю маршрутизаторов, которые это делают (но я никогда не исследовал), но если маршрутизаторы с такой функциональностью существуют, нам, вероятно, потребуется знать модель вашего маршрутизатора, чтобы сказать ты как.

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

1
27.01.2020, 20:32

1) Вы можете использовать команду dig (поиск информации о домене):

dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'

или: dig TXT + short oo.myaddr.l.google.com @ ns1.google.com

2) Вы можете попробовать команду host :

host myip.opendns.com resolver1.opendns.com

3) использовать сторонние веб-сайты с помощью команды curl или wget :

curl ipecho.net/plain ; echo

или

wget -qO- http://ipecho.net/plain ; echo

или

curl ipv4.icanhazip.com

4) С помощью telnet :

telnet myip.gelma.net
3
27.01.2020, 20:32

Вы можете только это сделать если ваш модем или маршрутизатор позволяет запрашивать эту информацию.IP-адрес назначается интерфейсу WAN / Internet на маршрутизаторе или модеме, поэтому у вас должна быть возможность запросить его или подключиться к интернет-службе, которая затем сообщит вам, что это было.

Вы можете использовать DNS для получения ответа, используя это,

dig + short @ resolver1.opendns.com myip.opendns.com

, но для его получения он все равно обращается к внешней службе.

Итак, либо запросите ваш маршрутизатор (если есть интерфейс, который вы можете использовать), либо используйте внешнюю службу.

Конечно, если ваш маршрутизатор является Linux-машиной, вы просто используете ip или ipconfig для запроса интерфейса WAN.

5
27.01.2020, 20:32

Теги

Похожие вопросы