มีคำสั่ง 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 จะเชื่อมต่อ