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:*:::*외국 주소에서?


3
IPv6에서 선행 0을 생략하여 콜론 만 남길 수 있습니다.
Louis

실제로 나는 너무 빨리 말했다. 왜 +1이 아닌 두 개의 콜론이 있는지 모르겠습니다. 마지막 포트가 포트를 나타내는 것 같습니다.
Louis

답변:


22

많은 다른 답변에서 언급했듯이 ::는 모든 0을 나타내고 netstat는 주소 뒤에 콜론을 표시하므로 세 개의 콜론을 얻습니다.

이 답변들에서 내가 보지 못한 것은 그것이 실제로 무엇을 의미하는지에 대한 질문에 대한 응답입니다 (이 경우).

netstat의 경우 : :( IPv6) 또는 0.0.0.0 (IPv4)은 기본적으로 "any"를 의미합니다.
따라서 소프트웨어는 모든 주소에서 TCP 포트 80 (HTTP 포트)을 수신하고 있습니다.

네트워크 카드 인터페이스가 여러 개인 경우 (나중에 설명 하겠지만) 특정 주소에서만 청취 할 수 있습니다. 예를 들어, 일부 소프트웨어를 사용하면 HTTP 서버가 유선 이더넷을 사용하는 네트워크 카드에서 수신하지만 무선 네트워킹을 사용하는 네트워크 카드에는 응답하지 않는 것과 같은 작업을 수행 할 수 있습니다. 그렇게하면 컴퓨터가 IPv4 192.0.2.100:80 (또는 IPv6 2001 : db8 : abcd :: 1234 : 80)에서 수신 대기하는 것과 같은 작업을 수행 할 수 있습니다.

그러나 "::: 80"을 듣고 있기 때문에 컴퓨터는 하나의 들어오는 IP 주소에서 포트 80 트래픽을 수신 하지 않고 어떤 포트에서도 포트 80 트래픽을 수신 하고 있습니다. IPv6 주소 있습니다.

듣고있는 인터페이스에 대해 왜 까다로워하고 싶습니까? 글쎄, 때로는이 기능을 사용했던 한 가지 방법은 컴퓨터가 루프백 인터페이스를 수신하도록하는 것입니다. (여러 네트워크 카드 인터페이스가 있다고 말했을 때를 기억하십시오. 이것이 제가 말한 이유 중 하나입니다. 실제 물리적 네트워크 연결이 있고 루프백 인터페이스도 있다고 생각합니다. 가장 일반적인 설정입니다. 요즘 대부분의 컴퓨터 유형.) SSH 터널링을 사용합니다. 그런 다음 로컬 VNC 뷰어를 SSH 터널의 로컬 끝에 연결하는 것과 같은 작업을 수행 할 수 있습니다. SSH 터널이 루프백 인터페이스에서 수신되도록함으로써 SSH 터널이 물리적 네트워크 인터페이스 중 하나에서 들어오는 트래픽을 수신 할까 걱정할 필요가 없습니다. 그래서,

경우에 따라 0.0.0.0 또는 ::은 기본적으로 "지정되지 않은"주소를 의미합니다. RFC 4291 섹션 2.5.2에"주소가 없음을 나타냅니다." 소프트웨어에 표시 할 특정 주소가없는 "잘못된"주소 (예 : 컴퓨터에 주소가 할당되지 않은 경우)를 참조하려고 할 때 가끔이 문제가 발생했습니다. 그러나이 경우 :: 또는 0.0.0.0은 "알 수없는"주소를 나타냅니다. 이것이 모든 LISTENING 포트가 "알 수 없음"으로 표시되는 이유입니다. 설정된 연결의 경우 원격 엔드가 누구인지 알 수 있습니다. 원격 엔드와 통신하기 때문입니다. "듣기"연결의 경우 새로운 대화를 듣고 있습니다. 이 트래픽은 세계 어느 곳에서나 올 수 있습니다. 들어오는 트래픽은 모든 주소에서 올 수 있습니다. 그리고 nestat이 표시하는 방식은 모두 0의 주소를 지정하는 것입니다. 사용할 특정 주소가 없으므로

소프트웨어를 모든 네트워크 인터페이스에서 수신하는 것이 매우 일반적이라는 점에 주목하면서 마무리하겠습니다. 일부 소프트웨어는 특정 인터넷 주소 또는 특정 네트워크 카드 만 수신하도록 구성 할 수 있습니다. 유효한 트래픽이 예상되지 않는 곳에서는 소프트웨어가 수신 대기하지 않기 때문에 좀 더 안전 할 수 있습니다. 공격 능력이 제한 될 수 있습니다. 그러나 많은 소프트웨어에 그러한 옵션이 없거나 그러한 옵션이 다소 묻혀 있거나 숨겨져 있습니다. 따라서 모든 네트워크 카드에서 듣는 것이 끔찍한 것은 아닙니다. 꽤 흔합니다. 또한 소프트웨어가 특정 네트워크 포트에서 트래픽을 수신하지 못하게하려면 방화벽으로 원치 않는 트래픽을 차단하는 등 다른 방법으로이를 수행 할 수 있습니다. 그렇게하면 방화벽이 트래픽을 차단할 수 있습니다. 그러나 (웹) 서버는 여전히 해당 네트워크 인터페이스에서 트래픽을 수신 할 수 있습니다. 이 경우 서버는 해당 인터페이스에서 트래픽을 얻지 못하지만 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소문자 로 16 진수로 작성되었습니다 .
  • 2 바이트마다 그룹화 :
  • 선행 0 제거 해야 합니다. 0000됩니다 0.
  • 가장 긴 순서 :0:0:0: MUST은 로 변환 ::. 한 번만 수행 할 수 있거나 모호성을 유발할 수 있습니다.

따라서 다음을 :::*의미합니다.

  • 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, 출력의 프로토콜 읽기 tcp6udp6더 나은 무슨 일이 일어나고 있는지 보여 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

그러나 이와 관련하여 준수해야 할 특정 규칙이 있습니다.


2

:: 1은 IPv4의 127.0.0.1과 같은 IPv6의 로컬 호스트입니다.

::: *는 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 올바르게 ::입니다 하지 가 지정되지 않은 주소 및 루프백에 있습니다 : 루프백 ::1.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Ciro에 동의합니다 : :: 1은 ::: *가 아니라 루프백입니다.
TOOGAM

0

알고 싶습니다 : 로컬 주소에서 ::: 무엇을 의미합니까?

netstat의 Linux 버전은 다음 표기법을 사용합니다. 여기서 IP 주소는 베어 *로 표시됩니다.

따라서 ::: 111은 ::의 IP와 111의 포트를 의미합니다.

::는 0을 0으로 대체 할 수있는 규칙을 사용하여 압축 형식의 IPv6 주소입니다. 완전히 작성하면 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000과 동일합니다.

IPv4와 마찬가지로 모든 0 주소 (지정되지 않은 주소)는 자리 표시 자 값으로 사용됩니다. 로컬 주소의 경우 소켓이 모든 IPv6 인터페이스 (및 netstat에 표시되지 않은 소켓 옵션에 따라 모든 IPv4 인터페이스)를 수신하고 있음을 의미합니다.

외국 주소에서 0.0.0.0:* 및 ::: *는 무엇입니까?

소켓이 특정 외부 주소에 바인딩되지 않았 음을 의미합니다. :: 또는 0.0.0.0은 지정되지 않은 IP 주소 (각각 IPv4 또는 IPv6의 경우)를 나타내고 *는 지정되지 않은 포트를 나타냅니다.

TCP의 경우 이는 들어오는 연결을 수신하는 소켓에만 적용됩니다. 연결을 수락하기 위해 "accept"를 호출하면 정의 된 원격 IP 및 포트를 사용하여 별도의 소켓이 작성됩니다.

UDP의 경우 연결 수락 개념이 없습니다. 외부 주소 ::: *를 사용하여 UDP 소켓에 바인딩 된 응용 프로그램은 "recvfrom"API 호출을 사용하여 패킷을 수신하고 패킷이 어디에서 왔는지 확인하고 "sendto"API 호출을 사용하여 특정 주소로 패킷을 보냅니다.

*이 표기법은 표시되는 문자열이 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 주소를 둘러 쌉니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.