Что такое ::: в локальном адресе вывода netstat?


37

Это вывод netstat -tulpn, который я получаю:

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      2055/hpiod
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2077/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2138/sendmail: acce
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      2060/python
tcp        0      0 0.0.0.0:735                 0.0.0.0:*                   LISTEN      1825/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      1781/rpcbind
tcp        0      0 :::80                       :::*                        LISTEN      2624/httpd
tcp        0      0 :::22                       :::*                        LISTEN      2096/sshd
udp        0      0 0.0.0.0:32768               0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1581/dhclient
udp        0      0 0.0.0.0:729                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:732                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               2077/cupsd
udp        0      0 :::32769                    :::*                                    2398/avahi-daemon:
udp        0      0 :::684                      :::*                                    1781/rpcbind
udp        0      0 :::5353                     :::*                                    2398/avahi-daemon:
udp        0      0 :::111                      :::*                                    1781/rpcbind

Мне любопытно узнать: что означает :::локальный адрес? А что такое 0.0.0.0:*и :::*в Foreign Address?


3
Вы можете опустить ведущие нули в IPv6, так что это просто оставляет двоеточие.
Луи

На самом деле я говорил слишком рано. Я не знаю, почему вместо двух есть три двоеточия, +1. Я думаю, что последний указывает на порт.
Луи

Ответы:


22

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

То, что я не видел ни в одном из этих ответов, является ответом на вопрос о том, что это действительно означает (в данном случае).

В случае netstat :: (в IPv6) или 0.0.0.0 (в IPv4) в основном означает «любой».
Итак, программа прослушивает TCP-порт 80 (HTTP-порт) по любому из адресов.

Если у вас есть несколько интерфейсов сетевых карт (что вы и делаете, как я сейчас объясню), вы можете прослушивать только определенный адрес. Например, с некоторым программным обеспечением вы могли бы сделать что-то вроде заставить ваш HTTP-сервер прослушивать сетевую карту, которая использует проводной Ethernet, но не реагировать на сетевую карту, которая использует беспроводную сеть. Если вы это сделаете, то ваш компьютер может сделать что-то вроде прослушивания IPv4 192.0.2.100:80 (или IPv6 2001: db8: abcd :: 1234: 80).

Но, поскольку вы слушаете «::: 80», ваш компьютер не прослушивает трафик порта 80 только на одном входящем IP-адресе, вы прослушиваете трафик порта 80 на любом адресе IPv6.

Почему вы хотите быть разборчивыми в том, какой интерфейс вы слушаете? Ну, иногда я использовал эту возможность, чтобы компьютер слушал интерфейс обратной связи. (Помните, когда я говорил, что у вас есть несколько интерфейсов сетевых карт ... это одна из причин, по которой я это сказал. Я предполагаю, что у вас есть реальное физическое сетевое соединение и у вас также есть интерфейс обратной связи. Это наиболее типичная настройка для большинство типов компьютеров в эти дни.) Я делаю это с туннелированием SSH. Затем я могу сделать что-то вроде подключения локального средства просмотра VNC к локальному концу туннеля SSH. Имея SSH-туннель, прослушивающий интерфейс обратной связи, мне не нужно беспокоиться о том, что SSH-туннель может прослушивать трафик, поступающий от одного из физических сетевых интерфейсов. Так,

В некоторых случаях 0.0.0.0 или :: в основном означает «неопределенный» адрес, как определено в разделе 2.5.2 RFC 4291который говорит «Это указывает на отсутствие адреса». Я иногда видел это, когда программное обеспечение пытается сослаться на «неправильный» адрес (например, если компьютеру не назначен адрес, возможно), где нет конкретного адреса для отображения. Однако в этом случае :: или 0.0.0.0 ссылается на «неизвестный» адрес. Вот почему все LISTENING порты отображаются как «неизвестные». Для установленного соединения вы знаете, кто является удаленным концом, потому что вы общаетесь с ними. Для соединения «LISTENING» вы слушаете совершенно новые разговоры. Этот трафик может исходить из любой точки мира. Входящий трафик может прийти с любого адреса. И способ отображения Nestat, который заключается в указании адреса всех нулей. Поскольку нет конкретного адреса для использования,

Я просто подведу итог, отметив, что прослушивание программного обеспечения на всех сетевых интерфейсах - очень распространенная вещь. Некоторое программное обеспечение можно настроить для прослушивания только определенного интернет-адреса или, возможно, определенной сетевой карты. И это может быть немного более безопасно, потому что тогда программное обеспечение не прослушивает, где не ожидается действительный трафик. Это может ограничить способность атаковать. Тем не менее, многие программы не имеют такой опции, или такая опция несколько скрыта / скрыта. Таким образом, прослушивание на всех сетевых картах - не супер страшная вещь. Это довольно часто. И, если вы хотите запретить программам получать трафик через определенный сетевой порт, есть другие способы сделать это, включая блокировку нежелательного трафика с помощью брандмауэра. Если вы сделаете это, брандмауэр может заблокировать трафик, но (веб) сервер все еще может прослушивать трафик на этом сетевом интерфейсе. В этом случае сервер никогда не получит трафик через этот интерфейс, но netstat все равно сообщит, что сервер прослушивает (для того трафика, который никогда не достигнет этого сервера). Просмотр отчета netstat о том, что серверное программное обеспечение прослушивает все интерфейсы, является очень распространенным явлением, и поэтому не о чем беспокоиться.

Наконец, я упомяну, что этот вопрос и этот ответ не относятся к Linux. (Я упоминаю об этом, потому что я вижу тег «Linux» в этом вопросе.) Показанные параметры командной строки и приведенный в качестве примера вывод могут быть получены из Linux, и разные операционные системы могут отображать вещи немного по-разному. Однако, что касается темы :: и 0.0.0.0, то, как netstat работает в этом отношении, идентично на машине с BSD или Microsoft Windows (и, вероятно, во многих других системах).


8

Как говорили другие, это естественная нотация IPv6 для этого контекста.

Давайте процитируем и интерпретируем соответствующие стандарты:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

http://tools.ietf.org/html/rfc5952#section-4 говорит, что канонические (не просто возможные сокращения) адреса IPv6:

  • написано в шестнадцатеричном виде с символами a-fнижнего регистра.
  • сгруппированы каждые 2 байта по :
  • ведущие 0 должны быть удалены. 0000становится 0.
  • самая длинная последовательность :0:0:0: ДОЛЖНА быть преобразована в ::. Может быть сделано только один раз, или приведет к двусмысленности.

Итак, :::*значит:

  • 0000:0000:0000:0000:0000:0000:0000на любой порт ( :*)
  • == 0:0:0:0:0:0:0(конечный 0 удаления)
  • == ::(последовательное сокращение нуля)

0000.0000.0000.0000.0000.0000.0000.0000: * == не указан адрес

http://tools.ietf.org/html/rfc4291#section-2.5.2 определяет «неопределенный адрес»:

Адрес 0: 0: 0: 0: 0: 0: 0: 0 называется неопределенным адресом. Он никогда не должен быть назначен ни одному узлу. Это указывает на отсутствие адреса. Одним из примеров его использования является поле «Адрес источника» любых пакетов IPv6, отправленных инициализирующим хостом до того, как он узнал свой собственный адрес.

Неуказанный адрес не должен использоваться в качестве адреса назначения пакетов IPv6 или заголовков маршрутизации IPv6. Пакет IPv6 с неопределенным адресом источника никогда не должен пересылаться маршрутизатором IPv6.

что делает его хорошим выбором для столбца N / A, как в этом случае.

Так ::это не localhost , что в этом же документе говорится находится ::1.

На netstat1.60 протоколы на выходе считываются tcp6и udp6для IPv6, которые лучше показывают, что происходит, например:

tcp6       0      0 :::22                   :::*                    LISTEN      1201/sshd
udp6       0      0 :::5353                 :::*                                1449/avahi-daemon:

Смотрите также:


3

Это относится к адресу IPv6. В IPv6 мы можем сжать последовательность 0, используя ::модификатор

Например,

0: 0: 0: 0: 0: 0: 0: 1

можно записать как

:: 1

Но есть определенные правила, которые необходимо соблюдать в этом отношении, которые вы можете найти в любом учебнике по Ipv6.


2

:: 1 является локальным узлом для IPv6, как 127.0.0.1 для IPv4.

::: * - это короткая версия 0: 0: 1: * (IPv6 0: 0: 0, порт *), это похоже на IPv4 0.0.0.0:*. Оба из них в столбце внешнего адреса означают, что столбец внешнего адреса отсутствует. В случае прослушивающих сокетов ясно, что нет (пока) подключенного внешнего адреса. В случае сокетов udp у вас обычно нет подключенных внешних адресов, поэтому они также перечислены с 0.0.0.0:*.


Для downvoters: не могли бы вы прокомментировать?
Вернер Хенце

0

::: * Был бы ваш localhost / loop назад в IPv6 :)

В основном, у вас есть сервисы, прослушивающие и подключающиеся к сервисам локально.


1
Если я правильно интерпретирую tools.ietf.org/html/rfc4291#section-2.5.2 , ::это не петля: это неуказанный адрес, а петля - в ::1.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Я согласен с Сиро: :: 1 - это петля, а не ::: *.
TOOGAM

0

Мне любопытно узнать: что означает ::: в Local Address?

Версия netstat для Linux использует обозначение: где IP-адрес отображается голым *.

Итак, ::: 111 означает IP of :: и порт 111.

:: является сжатым IPv6-адресом с использованием правила, согласно которому ряд нулей можно заменить на ::. Выписан полностью и эквивалентен 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Как и в случае IPv4, в качестве значения заполнителя используется адрес со всеми нулями (известный как неопределенный адрес). В случае локального адреса это означает, что сокет прослушивает все интерфейсы IPv6 (и, возможно, также все интерфейсы IPv4, в зависимости от параметров сокета, которые netstat не показывает).

А что такое 0.0.0.0:* и ::: * в иностранном адресе?

Это означает, что сокет не привязан к определенному внешнему адресу. :: или 0.0.0.0 указывает неуказанный IP-адрес (для IPv4 или IPv6 соответственно) и * указывает неуказанный порт.

Для TCP это относится только к сокетам, прослушивающим входящие соединения. Когда «accept» вызывается для принятия соединения, создается отдельный сокет с определенным удаленным IP-адресом и портом.

Для UDP нет концепции приема соединений. Приложение, привязанное к сокету UDP с внешним адресом ::: *, использует вызов API «recvfrom» для получения пакетов и определения их происхождения и вызов API «sendto» для отправки пакетов на определенный адрес.

* Это обозначение неудачно, потому что оно означает, что отображаемая строка означает разные вещи в netstat в другом месте. В большинстве случаев 3FFE :: 1234: 5678 будет означать IP-адрес 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678, но в выводе netstat linux это означает IP-адрес 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 и порт 5678. Windows-версия netstat, напротив, заключает адреса IPv6 в квадратные скобки, чтобы избежать двусмысленности.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.