ฉันต้องการคำสั่ง Linux เพื่อแสดงรายการพอร์ตที่เปิดฟรีทั้งหมดเพื่อใช้ในแอปพลิเคชัน
lsof -i TCP| fgrep LISTEN
ไม่เห็นว่าจะช่วยได้เนื่องจากพอร์ตที่ลิสต์นั้นไม่จำเป็นต้องใช้งานฟรี ฉันจะแสดงรายการพอร์ตเปิดฟรีที่ไม่ได้ใช้งานได้อย่างไร
ฉันต้องการคำสั่ง Linux เพื่อแสดงรายการพอร์ตที่เปิดฟรีทั้งหมดเพื่อใช้ในแอปพลิเคชัน
lsof -i TCP| fgrep LISTEN
ไม่เห็นว่าจะช่วยได้เนื่องจากพอร์ตที่ลิสต์นั้นไม่จำเป็นต้องใช้งานฟรี ฉันจะแสดงรายการพอร์ตเปิดฟรีที่ไม่ได้ใช้งานได้อย่างไร
คำตอบ:
netstat -lntu
ตามที่ตอบโดย @askmish จะให้รายชื่อของบริการที่ทำงานบนระบบของคุณบนพอร์ต tcp และ udp
-l
= เฉพาะบริการที่กำลังรับฟังในบางพอร์ต-n
= แสดงหมายเลขพอร์ตอย่าพยายามแก้ไขชื่อบริการ-t
= พอร์ต tcp-u
= udp พอร์ต-p
ชื่อ = ของโปรแกรมคุณไม่จำเป็นต้องใช้พารามิเตอร์ 'p' เนื่องจากคุณสนใจเพียงแค่รับว่าพอร์ตใดบ้างที่ว่างและไม่ใช่โปรแกรมที่กำลังทำงานอยู่
สิ่งนี้แสดงเฉพาะพอร์ตบนระบบของคุณที่ใช้หมด สิ่งนี้ไม่ได้บอกสถานะเครือข่ายของคุณเช่นหากคุณอยู่หลัง NAT และคุณต้องการให้บริการบางอย่างสามารถเข้าถึงได้จากภายนอก หรือหากไฟร์วอลล์บล็อกพอร์ตผู้เยี่ยมชมภายนอก ในกรณีนั้น nmap จะเข้าสู่การช่วยเหลือ คำเตือน: ใช้ nmap เฉพาะในเครือข่ายที่อยู่ภายใต้การควบคุมของคุณ นอกจากนี้ยังมีกฎไฟร์วอลล์ซึ่งสามารถบล็อกการแอบแฝง nmap ได้คุณจะต้องทำตัวเลือกต่าง ๆ เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง
ss
จะไม่รวมอยู่ด้วย
เนื่องจาก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
คำสั่งนี้จะแสดงรายการพอร์ตเครือข่ายเปิดและกระบวนการที่เป็นเจ้าของ:
netstat -lnptu
หลังจากนั้นคุณสามารถกรองผลลัพธ์ตามข้อกำหนดที่แน่นอนของคุณ
คุณสามารถใช้nmap
เพื่อผลลัพธ์ที่ละเอียดยิ่งขึ้นเกี่ยวกับพอร์ต
sudo netstat -lnptu
พอร์ตที่เปิดทั้งหมดรวมถึงปริมาณการตอบสนอง:
netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
คำถามเดิมของฉันคือเขาถามเกี่ยวกับพอร์ตที่ไม่ได้ใช้ไม่ใช่พอร์ตที่เชื่อมต่อกับบริการในปัจจุบัน หากเป็นกรณีนี้ไม่มีวิธีระบุรายการอื่น ๆ นอกเหนือจากการแสดงรายการพอร์ตที่ใช้และถือว่าพอร์ตอื่นไม่ได้ใช้งาน
อีกจุดหนึ่งที่ควรทราบ: ในฐานะผู้ใช้คุณจะไม่สามารถเปิดพอร์ตน้อยกว่า 1024 (คุณจะต้องได้รับอนุญาตรูทสำหรับสิ่งนั้น)
คำสั่งดังต่อไปนี้จะทำงานกับ 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
ลอง
sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' | awk 'NR>2{print $7}' | sort -n | uniq
และดูที่นี่
netstat
เลิกใช้แล้วในหลายระบบและss
ควรใช้แทน