รับรายการ Open Ports ใน Linux


191

ฉันต้องการคำสั่ง Linux เพื่อแสดงรายการพอร์ตที่เปิดฟรีทั้งหมดเพื่อใช้ในแอปพลิเคชัน

lsof -i TCP| fgrep LISTEN

ไม่เห็นว่าจะช่วยได้เนื่องจากพอร์ตที่ลิสต์นั้นไม่จำเป็นต้องใช้งานฟรี ฉันจะแสดงรายการพอร์ตเปิดฟรีที่ไม่ได้ใช้งานได้อย่างไร

คำตอบ:


258
netstat -lntu

ตามที่ตอบโดย @askmish จะให้รายชื่อของบริการที่ทำงานบนระบบของคุณบนพอร์ต tcp และ udp

  • -l = เฉพาะบริการที่กำลังรับฟังในบางพอร์ต
  • -n = แสดงหมายเลขพอร์ตอย่าพยายามแก้ไขชื่อบริการ
  • -t = พอร์ต tcp
  • -u = udp พอร์ต
  • -p ชื่อ = ของโปรแกรม

คุณไม่จำเป็นต้องใช้พารามิเตอร์ 'p' เนื่องจากคุณสนใจเพียงแค่รับว่าพอร์ตใดบ้างที่ว่างและไม่ใช่โปรแกรมที่กำลังทำงานอยู่

สิ่งนี้แสดงเฉพาะพอร์ตบนระบบของคุณที่ใช้หมด สิ่งนี้ไม่ได้บอกสถานะเครือข่ายของคุณเช่นหากคุณอยู่หลัง NAT และคุณต้องการให้บริการบางอย่างสามารถเข้าถึงได้จากภายนอก หรือหากไฟร์วอลล์บล็อกพอร์ตผู้เยี่ยมชมภายนอก ในกรณีนั้น nmap จะเข้าสู่การช่วยเหลือ คำเตือน: ใช้ nmap เฉพาะในเครือข่ายที่อยู่ภายใต้การควบคุมของคุณ นอกจากนี้ยังมีกฎไฟร์วอลล์ซึ่งสามารถบล็อกการแอบแฝง nmap ได้คุณจะต้องทำตัวเลือกต่าง ๆ เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง


19
โปรดทราบว่าnetstatเลิกใช้แล้วในหลายระบบและssควรใช้แทน
Johu

1
แต่ถ้าคุณอยู่ใน busybox ssจะไม่รวมอยู่ด้วย
jcollum

90

เนื่องจากnet-toolsเลิกใช้แล้วคุณสามารถใช้ssคำสั่งแทนnetstatหากnetstatไม่มีอยู่ในเครื่องของคุณ:

ss -lntu

ควรทำงานในทำนองเดียวกัน

netstat -lntu

ตามความช่วยเหลือในตัว:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
แฟล็กที่มีประโยชน์อื่นคือ -p ซึ่งแสดง id กระบวนการของซ็อกเก็ต
Talespin_Kit

21

คำสั่งนี้จะแสดงรายการพอร์ตเครือข่ายเปิดและกระบวนการที่เป็นเจ้าของ:

netstat -lnptu

หลังจากนั้นคุณสามารถกรองผลลัพธ์ตามข้อกำหนดที่แน่นอนของคุณ

คุณสามารถใช้nmapเพื่อผลลัพธ์ที่ละเอียดยิ่งขึ้นเกี่ยวกับพอร์ต


2
แฟล็ก -p ต้องการสิทธิ์รูทสำหรับกระบวนการบางอย่างดังนั้นจึงเป็นsudo netstat -lnptu
klaus se

5

พอร์ตที่เปิดทั้งหมดรวมถึงปริมาณการตอบสนอง:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
รายการเพียงหมายเลขพอร์ตที่ไม่ซ้ำกันและมีเพียง IPv4:netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
แอรอนคเดอ Bruyn

+1 สำหรับแสดงวิธีการกรองและแยกตัวเลขจากผลลัพธ์ แก้ไขเพื่อลบเอาต์พุต stderr จาก netstat (ซึ่งเพิ่มส่วนหัวให้กับผลลัพธ์ใน Ubuntu)
datashaman

อืมฉันคิดอย่างที่สอง -1 สำหรับการไม่ตอบคำถาม
datashaman

1

คำถามเดิมของฉันคือเขาถามเกี่ยวกับพอร์ตที่ไม่ได้ใช้ไม่ใช่พอร์ตที่เชื่อมต่อกับบริการในปัจจุบัน หากเป็นกรณีนี้ไม่มีวิธีระบุรายการอื่น ๆ นอกเหนือจากการแสดงรายการพอร์ตที่ใช้และถือว่าพอร์ตอื่นไม่ได้ใช้งาน

อีกจุดหนึ่งที่ควรทราบ: ในฐานะผู้ใช้คุณจะไม่สามารถเปิดพอร์ตน้อยกว่า 1024 (คุณจะต้องได้รับอนุญาตรูทสำหรับสิ่งนั้น)


0

คำสั่งดังต่อไปนี้จะทำงานกับ Unix ใด ๆ ที่ส่งออกในรูปแบบเดียวกันกับ Ubuntu / Debian - ที่อยู่ในท้องถิ่นในคอลัมน์ 4 และเอาท์พุทรวมถึงส่วนหัว 2 บรรทัดที่ด้านบน หากตัวเลขเหล่านี้แตกต่างให้ปรับแต่งคำสั่ง awk ด้านล่าง

หากคุณต้องการ IPv4 เท่านั้น:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

หากคุณต้องการ IPv6 เท่านั้น:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

หากคุณต้องการทั้งสองอย่างเข้าด้วยกัน:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

คำสั่งแสดงรายการหมายเลขพอร์ตที่กำลังฟังบนอินเตอร์เฟสทั้งหมด หากคุณต้องการแสดงรายการพอร์ตทั้งหมดที่กำลังฟังบนอินเตอร์เฟส localhost ให้ใช้สิ่งนี้:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

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