Это вывод 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?
networking
netstat
Прадипта
источник
источник
Ответы:
Как упоминалось во многих других ответах, :: представляет все нули, а затем 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 (и, вероятно, во многих других системах).
источник
Как говорили другие, это естественная нотация IPv6 для этого контекста.
Давайте процитируем и интерпретируем соответствующие стандарты:
::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *
http://tools.ietf.org/html/rfc5952#section-4 говорит, что канонические (не просто возможные сокращения) адреса IPv6:
a-f
нижнего регистра.:
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 определяет «неопределенный адрес»:
что делает его хорошим выбором для столбца N / A, как в этом случае.
Так
::
это неlocalhost
, что в этом же документе говорится находится::1
.На
netstat
1.60 протоколы на выходе считываютсяtcp6
иudp6
для IPv6, которые лучше показывают, что происходит, например:Смотрите также:
источник
Это относится к адресу IPv6. В IPv6 мы можем сжать последовательность
0
, используя::
модификаторНапример,
можно записать как
Но есть определенные правила, которые необходимо соблюдать в этом отношении, которые вы можете найти в любом учебнике по Ipv6.
источник
:: 1 является локальным узлом для IPv6, как 127.0.0.1 для IPv4.
::: * - это короткая версия 0: 0: 1: * (IPv6 0: 0: 0, порт *), это похоже на IPv4 0.0.0.0:*. Оба из них в столбце внешнего адреса означают, что столбец внешнего адреса отсутствует. В случае прослушивающих сокетов ясно, что нет (пока) подключенного внешнего адреса. В случае сокетов udp у вас обычно нет подключенных внешних адресов, поэтому они также перечислены с 0.0.0.0:*.
источник
::: * Был бы ваш localhost / loop назад в IPv6 :)
В основном, у вас есть сервисы, прослушивающие и подключающиеся к сервисам локально.
источник
::
это не петля: это неуказанный адрес, а петля - в::1
.Версия netstat для Linux использует обозначение: где IP-адрес отображается голым *.
Итак, ::: 111 означает IP of :: и порт 111.
:: является сжатым IPv6-адресом с использованием правила, согласно которому ряд нулей можно заменить на ::. Выписан полностью и эквивалентен 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.
Как и в случае IPv4, в качестве значения заполнителя используется адрес со всеми нулями (известный как неопределенный адрес). В случае локального адреса это означает, что сокет прослушивает все интерфейсы IPv6 (и, возможно, также все интерфейсы IPv4, в зависимости от параметров сокета, которые netstat не показывает).
Это означает, что сокет не привязан к определенному внешнему адресу. :: или 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 в квадратные скобки, чтобы избежать двусмысленности.
источник