Co to jest ::: w lokalnym adresie wyjścia netstat?

37

Oto wynik netstat -tulpn, który otrzymuję:

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

Ciekaw jestem, co oznacza :::adres lokalny? A co to jest 0.0.0.0:*i :::*na adres obcy?

Pradipta
źródło
3
Możesz pominąć początkowe zera w IPv6, aby po prostu opuścił dwukropek.
Louis,
Właściwie to mówiłem za wcześnie. Nie wiem, dlaczego są trzy dwukropki zamiast dwóch, +1. Chyba ostatni wskazuje na port.
Louis,

Odpowiedzi:

22

Jak wspomina wiele innych odpowiedzi: :: reprezentuje wszystkie zera, a następnie netstat może wyświetlać dwukropek po adresie, więc otrzymujesz trzy dwukropki.

W żadnej z tych odpowiedzi nie widziałem odpowiedzi na pytanie o to, co to tak naprawdę oznacza (w tym przypadku).

W przypadku netstat, :: (w IPv6) lub 0.0.0.0 (w IPv4) w zasadzie oznacza „dowolny”.
Tak więc oprogramowanie nasłuchuje na porcie TCP 80 (porcie HTTP) pod dowolnym adresem.

Jeśli masz wiele interfejsów kart sieciowych (co robisz, jak wyjaśnię za chwilę), możesz słuchać tylko pod określonym adresem. Na przykład w przypadku niektórych programów możesz zrobić coś takiego, aby serwer HTTP nasłuchiwał na karcie sieciowej korzystającej z przewodowego Ethernetu, ale nie reagował na kartę sieciową korzystającą z sieci bezprzewodowej. Jeśli to zrobisz, twój komputer może zrobić coś takiego jak nasłuch na IPv4 192.0.2.100:80 (lub IPv6 2001: db8: abcd :: 1234: 80).

Ale ponieważ słuchasz „::: 80”, twój komputer nie nasłuchuje ruchu portu 80 na jednym przychodzącym adresie IP, nasłuchujesz ruchu portu 80 na dowolnym adresie IPv6.

Dlaczego miałbyś chcieć być wybrednym w kwestii interfejsu, którego słuchasz? Cóż, jednym ze sposobów, w jaki czasami korzystałem z tej możliwości, jest słuchanie przez komputer interfejsu pętli zwrotnej. (Pamiętaj, kiedy powiedziałem, że masz wiele interfejsów kart sieciowych ... to jeden z powodów, dla których to powiedziałem. Zgaduję, że masz prawdziwe fizyczne połączenie sieciowe i że masz również interfejs pętli zwrotnej. Jest to najbardziej typowa konfiguracja dla większość typów komputerów w dzisiejszych czasach.) Robię to z tunelowaniem SSH. Następnie mogę zrobić coś takiego, jak połączenie lokalnej przeglądarki VNC z lokalnym końcem tunelu SSH. Dzięki temu, że tunel SSH nasłuchuje na interfejsie pętli zwrotnej, nie muszę się martwić, że tunel SSH może nasłuchiwać ruchu przychodzącego z jednego z fizycznych interfejsów sieciowych. Więc,

W niektórych przypadkach 0.0.0.0 lub :: zasadniczo oznacza „nieokreślony” adres, zgodnie z RFC 4291 sekcja 2.5.2która mówi „Wskazuje brak adresu”. Czasami widziałem to, gdy oprogramowanie próbuje odwoływać się do „nieprawidłowego” adresu (na przykład, jeśli komputer nie ma przypisanego adresu), na którym nie ma określonego adresu do wyświetlenia. Jednak w tym przypadku :: lub 0.0.0.0 odnosi się do „nieznanego” adresu. Dlatego wszystkie porty SŁUCHAWKI są oznaczone jako „nieznane”. W przypadku ustanowionego połączenia wiesz, kto jest zdalnym końcem, ponieważ komunikujesz się z nimi. W przypadku połączenia „LISTENING” słuchasz zupełnie nowych rozmów. Ten ruch może pochodzić, cóż, być może z dowolnego miejsca na świecie. Ruch przychodzący może pochodzić z dowolnego adresu. I sposób, w jaki wyświetla się nestat, to określenie adresu wszystkich zer. Ponieważ nie ma konkretnego adresu do użycia,

Podsumowując, zauważę, że oprogramowanie nasłuchujące na wszystkich interfejsach sieciowych jest bardzo powszechną rzeczą. Niektóre programy można skonfigurować tak, aby nasłuchiwały tylko określonego adresu internetowego lub konkretnej karty sieciowej. Może to być nieco bardziej bezpieczne, ponieważ wtedy oprogramowanie nie nasłuchuje tam, gdzie nie oczekuje się prawidłowego ruchu. To może ograniczyć zdolność do ataku. Jednak wiele programów nie ma takiej opcji lub taka opcja jest nieco zakopana / ukryta. Zatem słuchanie na wszystkich kartach sieciowych nie jest straszną rzeczą. To dość powszechne. A jeśli chcesz uniemożliwić oprogramowaniu odbieranie ruchu na określonym porcie sieciowym, istnieją inne sposoby na osiągnięcie tego, w tym blokowanie niechcianego ruchu za pomocą zapory ogniowej. Jeśli to zrobisz, zapora może blokować ruch, ale serwer (internetowy) może nadal nasłuchiwać ruchu w tym interfejsie sieciowym. W takim przypadku serwer nigdy nie uzyska ruchu na tym interfejsie, ale netstat nadal będzie raportować, że serwer nasłuchuje (dla tego ruchu, który nigdy nie dotrze do tego serwera). Widzenie raportu netstat, że oprogramowanie serwera nasłuchuje na wszystkich interfejsach, jest bardzo powszechne i dlatego nie należy się tym szczególnie przejmować.

Na koniec wspomnę, że to pytanie i ta odpowiedź nie są specyficzne dla Linuksa. (Wspominam o tym, ponieważ w tym pytaniu widzę znacznik „Linux”). Pokazane parametry wiersza poleceń i przykładowe dane wyjściowe mogły pochodzić z Linuksa, a różne systemy operacyjne mogą wyświetlać nieco inne rzeczy. Jednak w kwestii :: i 0.0.0.0 sposób działania netstat w tym zakresie jest identyczny na komputerze z systemem BSD lub Microsoft Windows (i przypuszczalnie w wielu innych systemach).

TOOGAM
źródło
8

Jak powiedzieli inni, jest to naturalna notacja IPv6 w tym kontekście.

Przytoczmy i zinterpretujmy odpowiednie standardy:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000: *

http://tools.ietf.org/html/rfc5952#section-4 mówi, że kanoniczne (nie tylko możliwe stenogramy) adresy IPv6 to:

  • napisane szesnastkowo z a-fmałymi literami.
  • pogrupowane co 2 bajty według :
  • wiodące zera MUSZĄ zostać usunięte. 0000staje się 0.
  • najdłuższa sekwencja :0:0:0: MUSI zostać przekonwertowana na ::. Można to zrobić tylko raz lub doprowadziłoby to do dwuznaczności.

Więc :::*środków:

  • 0000:0000:0000:0000:0000:0000:0000na dowolnym porcie ( :*)
  • == 0:0:0:0:0:0:0(końcowe usunięcie 0)
  • == ::(kolejne skurcz zerowy)

0000.0000.0000.0000.0000.0000.0000.0000: * == nieokreślony adres

http://tools.ietf.org/html/rfc4291#section-2.5.2 definiuje „nieokreślony adres”:

Adres 0: 0: 0: 0: 0: 0: 0: 0 nazywany jest adresem nieokreślonym. Nie wolno go nigdy przypisywać do żadnego węzła. Wskazuje brak adresu. Jednym z przykładów jego zastosowania jest pole Adres źródłowy dowolnych pakietów IPv6 wysłanych przez host inicjujący, zanim pozna swój własny adres.

Nieokreślony adres nie może być używany jako adres docelowy pakietów IPv6 lub w nagłówkach routingu IPv6. Pakiet IPv6 z nieokreślonym adresem źródłowym nigdy nie może być przesyłany dalej przez router IPv6.

co czyni go dobrym wyborem dla kolumny N / A jak w tym przypadku.

Tak nie:: jest , o czym mówi ten sam dokument . localhost::1

W wersji netstat1.60 protokoły na wyjściu są odczytywane, tcp6a udp6dla IPv6, które lepiej pokazują, co się dzieje, np .:

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

Zobacz też:

Ciro Santilli
źródło
3

Odnosi się do adresu IPv6. W IPv6 możemy skondensować sekwencję 0za pomocą ::modyfikatora

Na przykład,

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

można zapisać jako

:: 1

Istnieją jednak szczególne zasady, których należy przestrzegać w tym względzie, które można sprawdzić w dowolnym tutorialu na temat IPv6

anakin
źródło
2

:: 1 jest hostem lokalnym dla IPv6, podobnie jak 127.0.0.1 dla IPv4.

::: * to krótka wersja 0: 0: 1: * (IPv6 0: 0: 0, port *), jest jak IPv4 0.0.0.0:*. Oba w kolumnie adresu obcego oznaczają, że nie ma kolumny adresu obcego. W przypadku gniazd nasłuchowych jasne jest, że nie ma (jeszcze) podłączonego adresu zagranicznego. W przypadku gniazd udp zwykle nie masz podłączonych obcych adresów, więc są one również wymienione w 0.0.0.0:*.

Werner Henze
źródło
Do downvoters: czy możesz komentować?
Werner Henze
0

::: * Byłby twoim lokalnym hostem / pętlą z powrotem w IPv6 :)

Zasadniczo masz usługi nasłuchujące i łączące się z usługami lokalnie.

Jason
źródło
1
Jeśli poprawnie interpretuję tools.ietf.org/html/rfc4291#section-2.5.2 , nie:: jest to sprzężenie zwrotne: jest to nieokreślony adres, a sprzężenie zwrotne ma wartość ::1.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Zgadzam się z Ciro: :: 1 jest sprzężeniem zwrotnym, a nie ::: *.
TOOGAM
0

Jestem ciekawy, co oznacza: co oznacza ::: w adresie lokalnym?

Wersja linst netstat używa zapisu: gdzie adres IP jest wyświetlany goły *.

Więc ::: 111 oznacza adres IP :: i port 111.

:: to adres IPv6 w formie skondensowanej z wykorzystaniem reguły, że ciąg zer można zastąpić ::. Napisany w całości jest równoważny 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0000.

Podobnie jak w przypadku IPv4 adres wszystkich zer (znany jako adres nieokreślony) jest używany jako wartość zastępcza. W przypadku adresu lokalnego oznacza to, że gniazdo nasłuchuje na wszystkich interfejsach IPv6 (i ewentualnie na wszystkich interfejsach IPv4, w zależności od opcji gniazd, których nie pokazuje netstat).

Co to jest 0.0.0.0:* i ::: * w adresie zagranicznym?

Oznacza to, że gniazdo nie jest powiązane z określonym adresem zagranicznym. :: lub 0.0.0.0 oznacza nieokreślony adres IP (odpowiednio dla IPv4 lub IPv6), a * oznacza nieokreślony port.

W przypadku TCP dotyczy to tylko gniazd nasłuchujących połączeń przychodzących. Po wywołaniu „accept” w celu zaakceptowania połączenia tworzone jest oddzielne gniazdo z określonym zdalnym adresem IP i portem.

W przypadku UDP nie istnieje koncepcja akceptowania połączeń. Aplikacja powiązana z gniazdem UDP o obcym adresie ::: * używa wywołania API „recvfrom” do odbierania pakietów i określania, skąd pochodzą oraz wywołania API „sendto” do wysyłania pakietów na określony adres.

* Ten zapis jest niefortunny, ponieważ oznacza, że ​​wyświetlany ciąg znaków oznacza inne rzeczy w netstat niż gdzie indziej. W większości kontekstów 3FFE :: 1234: 5678 oznaczałoby adres IP 3FFE: 0000: 0000: 0000: 0000: 0000: 1234: 5678, ale w wyjściu netstat linux oznacza adres IP 3FFE: 0000: 0000: 0000: 0000: 0000 : 0000: 1234 i port 5678. Netstat w wersji dla systemu Windows otacza adresy IPv6 w nawiasach kwadratowych, aby uniknąć dwuznaczności.

płyn do płukania
źródło