::: ใน Local Address ของเอาต์พุต 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 ดังนั้นเพียงแค่ออกจากลำไส้ใหญ่
หลุยส์

ที่จริงฉันพูดเร็วเกินไป ฉันไม่รู้ว่าทำไมมีสาม colons แทนที่จะเป็นสอง +1 ฉันเดาว่าอันสุดท้ายคือพอร์ต
หลุยส์

คำตอบ:


22

ดังที่คำตอบอื่น ๆ ที่กล่าวถึง :: เป็นตัวแทนของศูนย์ทั้งหมดและจากนั้น netstat อาจแสดงเครื่องหมายจุดคู่หลังที่อยู่ดังนั้นคุณจะได้รับสาม colons

สิ่งที่ฉันไม่เห็นในคำตอบใด ๆ เหล่านี้คือการตอบคำถามเกี่ยวกับความหมายที่แท้จริง (ในกรณีนี้)

ในกรณีของ netstat :: (ใน IPv6) หรือ 0.0.0.0 (ใน IPv4) นั้นหมายถึง "any"
ดังนั้นซอฟต์แวร์กำลังฟังบนพอร์ต TCP 80 (พอร์ต HTTP) ที่อยู่ใด ๆ

หากคุณมีการ์ดเครือข่ายหลายอินเตอร์เฟส (ซึ่งคุณทำตามที่ฉันจะอธิบายในช่วงเวลาหนึ่ง) เป็นไปได้ที่คุณจะฟังเฉพาะที่อยู่ที่เฉพาะเจาะจง ตัวอย่างเช่นด้วยซอฟต์แวร์บางอย่างคุณสามารถทำสิ่งต่าง ๆ เช่นทำให้เซิร์ฟเวอร์ HTTP ของคุณรับฟังบนการ์ดเครือข่ายที่ใช้ Ethernet แบบมีสาย แต่ไม่ตอบสนองต่อการ์ดเครือข่ายที่ใช้เครือข่ายไร้สาย ถ้าคุณทำอย่างนั้นคอมพิวเตอร์ของคุณอาจทำอะไรเช่นฟังบน IPv4 192.0.2.100:80 (หรือ IPv6 2001: db8: abcd :: 1234: 80)

แต่เนื่องจากคุณกำลังฟัง "::: 80" คอมพิวเตอร์ของคุณไม่ฟังพอร์ต 80 ทราฟฟิกจากที่อยู่ IP ขาเข้าเพียงอันเดียวคุณกำลังฟังทราฟฟิกพอร์ต 80 บนที่อยู่ IPv6 ใด ๆ

ทำไมคุณถึงอยากจะจู้จี้จุกจิกเกี่ยวกับอินเทอร์เฟซที่คุณฟังอยู่ วิธีหนึ่งที่ฉันใช้ความสามารถนี้บางครั้งก็คือการให้คอมพิวเตอร์ฟังอินเทอร์เฟซแบบวนรอบ (โปรดจำไว้ว่าเมื่อฉันบอกว่าคุณมีอินเตอร์เฟซการ์ดเครือข่ายหลายตัว ... นี่คือเหตุผลหนึ่งที่ฉันพูดแบบนั้นฉันเดาว่าคุณมีการเชื่อมต่อเครือข่ายทางกายภาพจริง ๆ และคุณมีอินเทอร์เฟซแบบวนรอบ คอมพิวเตอร์ส่วนใหญ่ในทุกวันนี้) ฉันทำอย่างนั้นกับ SSH tunneling จากนั้นฉันสามารถทำบางสิ่งเช่นทำให้วิวเวอร์ VNC ท้องถิ่นเชื่อมต่อกับปลายโลคัลของอุโมงค์ SSH โดยการให้ทันเนล SSH ฟังบนอินเทอร์เฟซย้อนกลับฉันไม่ต้องกังวลว่าอุโมงค์ SSH อาจรับส่งข้อมูลที่มาจากหนึ่งในอินเทอร์เฟซเครือข่ายทางกายภาพ ดังนั้น,

ในบางกรณี 0.0.0.0 หรือ :: โดยทั่วไปหมายถึงที่อยู่ "ไม่ระบุ" ตามที่ระบุโดยRFC 4291 ส่วน 2.5.2ซึ่งระบุว่า "เป็นการระบุว่าไม่มีที่อยู่" บางครั้งฉันเห็นสิ่งนี้เมื่อซอฟต์แวร์พยายามอ้างถึงที่อยู่ "ไม่ถูกต้อง" (เช่นถ้าคอมพิวเตอร์ไม่มีที่อยู่ที่ได้รับมอบหมายอาจ) ซึ่งไม่มีที่อยู่เฉพาะที่จะแสดง อย่างไรก็ตามในกรณีนี้ :: หรือ 0.0.0.0 อ้างอิงถึงที่อยู่ "ไม่ทราบ" นั่นคือเหตุผลที่พอร์ต LISTENING ทั้งหมดแสดงเป็น "ไม่รู้จัก" สำหรับการเชื่อมต่อที่สร้างไว้แล้วคุณรู้ว่าใครคือผู้ที่อยู่ปลายทางระยะไกลเพราะคุณสื่อสารกับพวกเขา สำหรับการเชื่อมต่อ "ฟัง" คุณกำลังฟังบทสนทนาใหม่เอี่ยม การรับส่งข้อมูลนั้นอาจมาจากที่ใดก็ได้ในโลก ทราฟฟิกที่เข้ามาอาจมาจากที่อยู่ใดก็ได้ และวิธีที่เนสท์เล่แสดงนั่นคือการระบุที่อยู่ของศูนย์ทั้งหมด เนื่องจากไม่มีที่อยู่เฉพาะที่จะใช้

ฉันจะสรุปโดยการสังเกตว่าการมีซอฟต์แวร์ฟังอยู่ในอินเตอร์เฟสเครือข่ายทั้งหมดเป็นสิ่งที่พบได้บ่อยมาก ซอฟต์แวร์บางตัวสามารถกำหนดค่าให้รับฟังเฉพาะที่อยู่อินเทอร์เน็ตที่เฉพาะเจาะจงหรืออาจเป็นการ์ดเครือข่ายเฉพาะ และนั่นอาจมีความปลอดภัยมากกว่าเดิมเล็กน้อยเนื่องจากซอฟต์แวร์ไม่ได้ฟังเมื่อไม่มีการรับส่งข้อมูลที่ถูกต้อง นั่นอาจจำกัดความสามารถในการโจมตี อย่างไรก็ตามซอฟต์แวร์จำนวนมากไม่มีตัวเลือกดังกล่าวหรือตัวเลือกดังกล่าวค่อนข้างฝัง / ซ่อนอยู่ ดังนั้นการฟังการ์ดเครือข่ายทั้งหมดจึงไม่ใช่เรื่องเลวร้ายอะไร เป็นเรื่องธรรมดามาก และหากคุณต้องการป้องกันไม่ให้ซอฟต์แวร์รับการรับส่งข้อมูลบนพอร์ตเครือข่ายที่เฉพาะเจาะจงมีวิธีอื่นที่จะทำให้สำเร็จซึ่งรวมถึงการปิดกั้นการรับส่งข้อมูลที่ไม่พึงประสงค์ด้วยไฟร์วอลล์ หากคุณทำเช่นนั้นไฟร์วอลล์อาจบล็อกทราฟฟิก แต่เซิร์ฟเวอร์ (เว็บ) อาจยังคงรับฟังการรับส่งข้อมูลบนอินเทอร์เฟซเครือข่ายนั้น ในกรณีนั้นเซิร์ฟเวอร์จะไม่รับปริมาณการใช้งานบนอินเทอร์เฟซนั้น แต่ 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 ของนำหน้า จะกลายเป็น00000
  • ลำดับที่ยาวที่สุดของ: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 คือ localhost สำหรับ 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

::: * จะเป็น localhost / วนกลับใน IPv6 :)

โดยทั่วไปคุณมีบริการฟังและเชื่อมต่อกับบริการในพื้นที่


1
ถ้าผมตีความtools.ietf.org/html/rfc4291#section-2.5.2อย่างถูกต้อง::คือไม่ย้อนกลับ: ::1มันเป็นที่อยู่ที่ไม่ได้ระบุและย้อนกลับที่
Ciro Santilli 新疆改造中心法轮功六四事件

ฉันเห็นด้วยกับ Ciroro: :: 1 คือลูปแบ็คไม่ใช่ ::: *
TOOGAM

0

ฉันอยากรู้ว่า: ::: ใน Local Address หมายถึงอะไร

เวอร์ชัน 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 จะใช้กับซ็อกเก็ตที่รับฟังการเชื่อมต่อขาเข้าเท่านั้น เมื่อ "ยอมรับ" ถูกเรียกให้ยอมรับการเชื่อมต่อซ็อกเก็ตแยกจะถูกสร้างขึ้นด้วย 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 netstat เวอร์ชั่น windows โดยรอบจะเปรียบเทียบกับที่อยู่ IPv6 ในวงเล็บเหลี่ยมเพื่อหลีกเลี่ยงความคลุมเครือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.