วิธีรับรายการพอร์ตที่ว่างในเซิร์ฟเวอร์ Unix


15

ฉันมีความต้องการที่จะรู้ว่าพอร์ตทั้งหมดในเครื่อง Solaris ของฉันนั้นฟรีที่จะใช้สำหรับการสื่อสารเครือข่ายใด ๆ

ฉันลองnetstat -aคำสั่ง แต่ข้อมูลที่ส่งคืนไม่ได้ให้ผลลัพธ์ที่น่าเชื่อถือซึ่งพอร์ตทั้งหมดที่ฉันสามารถใช้สำหรับแอปพลิเคชันใหม่ที่ฉันกำลังเขียน ขอบคุณสำหรับความช่วยเหลือใด ๆ ที่มีให้ในเรื่องนี้


ภายในช่วงตัวเลขอะไร มีพอร์ตชั่วคราวที่ใช้งานอยู่เสมอและสิ่งเหล่านี้มีการเปลี่ยนแปลงอยู่ตลอดเวลา
mdpc

แล้วผลของnetstat -anการไม่เชื่อคุณล่ะ? netstatควรแสดงรายการทุกสิ่งที่กำลังใช้งานอยู่ ทุกอย่างอื่น (ปกติจะมีหลายพันพอร์ต!) มีให้
Celada

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

คำตอบ:


15

1:คุณไม่ควรใช้พอร์ตที่ไม่ระบุชื่อ (aka ephemeral ports) เพื่อใช้บริการ UDP หรือ TCP

โดยค่าเริ่มต้นพอร์ตเหล่านี้อยู่ในช่วง 32768 - 65535

# ndd /dev/tcp tcp_smallest_anon_port
32768
# ndd /dev/tcp tcp_largest_anon_port 
65535

2:ยกเว้นว่าบริการของคุณกำลังทำงานเป็น root หรือมีสิทธิ์ RBAC ที่ต้องการคุณไม่ควรใช้พอร์ตที่มีสิทธิ์ โดยค่าเริ่มต้นพอร์ตทั้งหมดจาก 1 ถึง 1024 จะได้รับสิทธิพิเศษ:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024

3:หากคุณไม่ทราบว่ากำลังทำอะไรอยู่คุณไม่ควรใช้พอร์ตที่รู้จักกันดีซึ่งคาดว่าจะเรียกใช้บริการที่แตกต่างจากที่คุณวางแผนไว้ /etc/servicesพอร์ตที่รู้จักกันดีมีการระบุไว้ใน เช่น:

# tail /etc/services
dtspc           6112/tcp                        # CDE subprocess control
fs              7100/tcp                        # Font server
solaris-audit   16162/tcp                       # Secure remote audit logging
servicetag      6481/udp
servicetag      6481/tcp
wnn6            22273/tcp                       # Wnn6 jserver
wnn6            22273/udp                       # Wnn6 jserver
rdc             121/tcp                         # SNDR server daemon
snmpd           161/udp        snmp             # Net-SNMP snmp daemon
swat            901/tcp                         # Samba Web Adm.Tool

4:คุณไม่ควรใช้พอร์ตที่ใช้งานอยู่โดยบริการที่มีอยู่แล้ว คุณสามารถรับสิ่งเหล่านี้ด้วยการทำงาน:

# netstat -an | grep LISTEN | nawk '{$0=$1;gsub(".*\\.","");print}' | sort -un

5:ในที่สุดคุณไม่ควรใช้พอร์ตที่บริการใช้งานอยู่ในขณะนี้ปิดใช้งาน แต่อาจจะเปิดใช้งานได้ในอนาคต นี่คือส่วนที่ยากที่สุดในการปฏิบัติตาม ...


10

คุณสามารถใช้พอร์ต 1-65,535 ในระบบของคุณที่ 1024 แรกมีสิทธิ์พิเศษ

ดังนั้นแทนที่จะค้นหาพอร์ตว่างคุณสามารถรับรายการพอร์ตที่ใช้โดยใช้คำสั่งด้านล่าง

netstat -tunlep | grep LISTEN | awk '{print $4}'

จากนั้นคุณสามารถใช้พอร์ตใดก็ได้ตั้งแต่ 1-65535 ยกเว้นพอร์ตเหล่านั้น


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