Що таке ::: в локальній адресі виводу netstat?


30

Це вихід 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:* і :::* у зовнішній адресі?


3
Ви можете пропустити нульові значення в IPv6, так що просто залишає двокрапку.
Louis

Насправді я говорив дуже скоро. Я не знаю, чому замість двох колонок є три колони. Думаю, останній показує порт.
Louis

Відповіді:


20

Як багато хто з інших відповідей згадує, :: представляє всі нулі, і тоді 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 viewer підключення до локальних кінця SSH тунелю. Завдяки тому, що SSH-тунель прослуховує інтерфейс loopback, мені не потрібно турбуватися про те, що SSH-тунель може слухати трафік, який надходить з одного з фізичних мережевих інтерфейсів. Отже, SSH тунель буде бачити лише мережевий трафік, який надходить з мого комп'ютера.

У деяких випадках 0.0.0.0 або :: в основному означає "невизначену" адресу, як зазначено RFC 4291 розділ 2.5.2 який говорить: "Це вказує на відсутність адреси". Я іноді бачив це, коли програмне забезпечення намагається посилатися на "недійсну" адресу (наприклад, якщо комп'ютер не має призначеної адреси, можливо), де немає конкретної адреси для відображення. Проте в цьому випадку :: або 0.0.0.0 відноситься до "невідомої" адреси. Тому всі порти LISTENING відображаються як "невідомі". Для встановленого зв'язку, ви знаєте, хто віддалений кінець, тому що ви спілкуєтеся з ними. Для з'єднання "LISTENING" ви слухаєте нові бесіди. Цей трафік міг би надходити, ну, можливо, десь у світі. Вхідний трафік може надходити з будь-якої адреси. А спосіб, який відображає nestat, полягає в тому, щоб вказати адресу всіх нулів. Оскільки не існує конкретної адреси для використання, "невизначена" адреса здається цілком доречною.

Я просто завершу, зазначивши, що наявність програмного забезпечення на всіх мережевих інтерфейсах є дуже поширеним явищем. Деяке програмне забезпечення може бути налаштоване для прослуховування лише певної Інтернет-адреси або, можливо, конкретної мережевої карти. І це може бути трохи більш безпечним, тому що тоді програмне забезпечення не слухає, де не очікується дійсний трафік. Це може обмежити здатність атакувати. Проте, багато програмного забезпечення не мають такого варіанту, або такий варіант дещо похований / прихований. Отже, прослуховування на всіх мережевих картах не надто жахлива річ. Це досить поширене явище. І якщо ви хочете, щоб програмне забезпечення не отримувало трафік на певний мережевий порт, є інші способи досягти цього, включаючи блокування небажаного трафіку за допомогою брандмауера. Якщо ви це зробите, брандмауер може блокувати трафік, але (веб-сервер) все одно може слухати трафік на цьому мережевому інтерфейсі. У цьому випадку сервер ніколи не отримає трафік на цьому інтерфейсі, але netstat все одно повідомить, що сервер слухає (для трафіку, який ніколи не досягне цього сервера). Бачення звіту netstat про те, що серверне програмне забезпечення прослуховується на всіх інтерфейсах, є дуже поширеним явищем, і тому не варто особливо хвилюватися.

Нарешті, згадаю, що це питання, і ця відповідь, не є специфічними для Linux. (Я згадую це, тому що я бачу тег "Linux" у цьому питанні.) Показані параметри командного рядка, а також наведений приклад виводу, можливо, вийшли з Linux, і різні операційні системи можуть відображати дещо інше. Тим не менш, про тему :: і 0.0.0.0, спосіб, який netstat працює в цьому відношенні ідентичний на машині під управлінням BSD або Microsoft Windows (і, мабуть, багато інших систем).


7

Як кажуть інші, це природне позначення 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 називається невизначеною адресою. Це      ніколи не слід призначати будь-якому вузлу. Вона вказує на відсутність      адресу. Одним із прикладів його використання є поле Source Address      будь-які пакети IPv6, надіслані хостом ініціалізації, перш ніж він дізнався      власну адресу.

Невизначену адресу не можна використовувати як адресу призначення      пакетів IPv6 або в заголовках маршрутизації IPv6. Пакет IPv6 з a      адреса джерела невизначеного ніколи не повинна пересилатися за допомогою IPv6      маршрутизатор.

що робить його гарним вибором для стовпця N / A, як у цьому випадку.

Тому :: є ні localhost, про що йдеться в документі ::1.

Увімкнено netstat 1.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: ви можете, будь ласка, коментар?
Werner Henze

0

::: * Повернемося до вашого місцевого хосту / IPv6:

В основному, у вас є послуги прослуховування та підключення до послуг на місцевому рівні.


1
Якщо я тлумачу tools.ietf.org/html/rfc4291#section-2.5.2 правильно, :: є ні loopback: це невизначена адреса, а loopback - ::1.
Ciro Santilli 新疆改造中心 六四事件 法轮功

Я згоден з Ciro: :: 1 є loopback, не ::: *.
TOOGAM

0

Мені цікаво дізнатися: що означає ::: в локальній адресі?

Linux-версія netstat використовує позначення: де IP-адреса відображається голою *.

Так ::: 111 означає IP :: і порт 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, але в виході linux netstat це означає IP-адресу 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 і порт 5678. Версія Windows netstat за контрастом оточує адреси IPv6 у квадратних дужках, щоб уникнути двозначності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.