มีคำสั่ง command line หรือวิธีอื่นในการค้นหาและแสดงรายการหมายเลขพอร์ตไม่ว่างและว่างบนเครื่อง Linux ของฉันหรือไม่
มีคำสั่ง command line หรือวิธีอื่นในการค้นหาและแสดงรายการหมายเลขพอร์ตไม่ว่างและว่างบนเครื่อง Linux ของฉันหรือไม่
คำตอบ:
คำสั่ง
netstat -antu
จะแสดงพอร์ต tcp และ udp ทั้งหมดที่ใช้งานอยู่ ผลลัพธ์จะมีลักษณะดังนี้:
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN
 หมายเลขหลังเครื่องหมายโคลอนในฟิลด์ Local Address แสดงพอร์ตที่ใช้งานอยู่ หากสถานะเป็น "LISTEN" หมายถึงพอร์ตที่ใช้สำหรับการเชื่อมต่อขาเข้า หากที่อยู่ IP ใน Local Address ฟิลด์คือ 0.0.0.0 มันหมายความว่าการเชื่อมต่อขาเข้าจะได้รับการยอมรับในที่อยู่ IP ใด ๆ ที่กำหนดให้กับอินเทอร์เฟซ - ดังนั้นนี่หมายความว่าจากการเชื่อมต่อที่เกิดขึ้นนอกเครื่องของคุณ 
 ถ้ามันบอกว่า localhost หรือ 127.0.0.1 มันจะยอมรับเฉพาะการเชื่อมต่อจากเครื่องของคุณ 
 นอกจากนี้หากคุณเพิ่ม -p พารามิเตอร์และเรียกใช้เป็นรูทจะแสดงกระบวนการที่เปิดพอร์ต: 
$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN      860/rpc.statd
สิ่งใดก็ตามที่ไม่ได้แสดงว่ากำลังใช้งานอยู่ฟรี แต่ผู้ใช้ (บัญชีที่ไม่มีสิทธิพิเศษ) สามารถเปิดพอร์ตที่สูงกว่า 1,023
-antu สามารถเขียนเป็น -tuna  
                     วิธีที่ดีและเชื่อถือได้ในการตรวจสอบพอร์ตที่เปิดใช้อยู่ ss (แทนที่สำหรับ  เลิกใช้  netstat ) สามารถใช้งานได้ในสคริปต์โดยไม่ต้องมีสิทธิ์ระดับสูง (เช่น sudo ) 
 การใช้งาน: ตัวเลือก -l สำหรับการฟังพอร์ตตัวเลือก -n เพื่อข้ามการแก้ไข DNS และตัวกรองบนพอร์ตต้นทาง NN: src :NN (แทนที่ NN โดยพอร์ตที่คุณต้องการตรวจสอบ) สำหรับตัวเลือกเพิ่มเติมให้ดู man ss
ss -ln src :NN
ตัวอย่าง:
[user@server ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[user@server ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
และในสคริปต์โดยใช้ grep เราสามารถทดสอบว่าเอาต์พุตมีพอร์ตที่เราร้องขอ ตัวอย่างที่มีการใช้งานพอร์ต 80 (ดูด้านบน):
myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 80 is in use (result == 1)
ตัวอย่างที่ไม่ได้ใช้พอร์ต 81 (ดูด้านบน)
myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 81 is NOT in use (result == 0)
อีกทางหนึ่ง:
telnet localhost <PORT_NUMBER>
หากพอร์ตว่างคุณจะได้รับข้อผิดพลาด หากพอร์ตที่ใช้งาน telnet จะเชื่อมต่อ