วิธีใช้คำสั่ง ss บน Linux
เผยแพร่แล้ว: 2022-01-29 คำสั่ง ss
เป็นการแทนที่ที่ทันสมัยสำหรับ netstat
แบบคลาสสิก คุณสามารถใช้บน Linux เพื่อรับสถิติเกี่ยวกับการเชื่อมต่อเครือข่ายของคุณ ต่อไปนี้คือวิธีการทำงานกับเครื่องมือแสนสะดวกนี้
คำสั่ง ss กับ netstat
การแทนที่คำสั่ง netstat
ที่เลิกใช้แล้ว ss
ให้ข้อมูลโดยละเอียดเกี่ยวกับวิธีที่คอมพิวเตอร์ของคุณสื่อสารกับคอมพิวเตอร์ เครือข่าย และบริการอื่นๆ
ss
แสดงสถิติสำหรับ Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Unix (ระหว่างกระบวนการ) และซ็อกเก็ตดิบ ซ็อกเก็ตดิบ ทำงานที่ระดับ OSI ของเครือข่าย ซึ่งหมายความว่าต้องจัดการส่วนหัว TCP และ UDP โดยซอฟต์แวร์แอปพลิเคชัน ไม่ใช่โดยเลเยอร์การขนส่ง ข้อความ Internet Control Message Protocol (ICMP) และยูทิลิตี้ ping ต่างก็ใช้ซ็อกเก็ตดิบ
ใช้ ss
คุณไม่จำเป็นต้องติดตั้ง ss
เนื่องจากเป็นส่วนหนึ่งของการแจกจ่าย Linux ที่อัปเดตแล้ว อย่างไรก็ตาม ผลลัพธ์อาจยาวมาก—เราได้ผลลัพธ์ที่มีมากกว่า 630 บรรทัด ผลลัพธ์ยังกว้างมาก
ด้วยเหตุนี้ เราจึงรวมการแสดงข้อความของผลลัพธ์ที่เราได้รับ เนื่องจากจะไม่พอดีกับภาพหน้าจอ เราได้ตัดแต่งเพื่อให้จัดการได้ง่ายขึ้น
แสดงรายการการเชื่อมต่อเครือข่าย
การใช้ ss
โดยไม่มีตัวเลือกบรรทัดคำสั่งแสดงรายการซ็อกเก็ตที่ไม่รับฟัง นั่นคือแสดงรายการซ็อกเก็ตที่ไม่ได้อยู่ในสถานะฟัง
หากต้องการดูสิ่งนี้ ให้พิมพ์ดังต่อไปนี้:
ss
Netid State Recv-Q Send-Q ที่อยู่ในท้องถิ่น:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688 u_str ESTAB 0 0 * 35550 * 35551 ... u_str ESTAB 0 0 * 38127 * 38128 u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242 u_str ESTAB 0 0 * 19039 * 19040 u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306 icmp6 UNCONN 0 0 *:ipv6-icmp *:* udp ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:บูต
คอลัมน์มีดังนี้:
- Netid : ประเภทของซ็อกเก็ต ในตัวอย่างของเรา เรามี "u_str" สตรีม Unix "udp" และ "icmp6" ซึ่งเป็นซ็อกเก็ต ICMP เวอร์ชัน IP 6 คุณสามารถหาคำอธิบายเพิ่มเติมเกี่ยวกับประเภทซ็อกเก็ต Linux ได้ในหน้าคู่มือของ Linux
- สถานะ : สถานะที่ซ็อกเก็ตอยู่ใน
- Recv-Q : จำนวนแพ็กเก็ตที่ได้รับ
- Send-Q : จำนวนแพ็กเก็ตที่ส่ง
- Local Address:Port : ที่อยู่และพอร์ตในเครื่อง (หรือค่าที่เทียบเท่าสำหรับซ็อกเก็ต Unix)
- Peer Address:Port : ที่อยู่และพอร์ตระยะไกล (หรือค่าที่เทียบเท่าสำหรับซ็อกเก็ต Unix)
สำหรับซ็อกเก็ต UDP คอลัมน์ "สถานะ" มักจะว่างเปล่า สำหรับซ็อกเก็ต TCP สามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้:
- ฟัง: ฝั่งเซิร์ฟเวอร์เท่านั้น ซ็อกเก็ตกำลังรอคำขอเชื่อมต่อ
- SYN-SENT: ฝั่งไคลเอ็นต์เท่านั้น ซ็อกเก็ตนี้ได้ส่งคำขอเชื่อมต่อแล้วและกำลังรอดูว่าจะยอมรับหรือไม่
- SYN-RECEIVED: ฝั่งเซิร์ฟเวอร์เท่านั้น ซ็อกเก็ตนี้กำลังรอการตอบรับการเชื่อมต่อหลังจากยอมรับคำขอเชื่อมต่อ
- จัดตั้งขึ้น: เซิร์ฟเวอร์และไคลเอนต์ มีการสร้างการเชื่อมต่อที่ใช้งานได้ระหว่างเซิร์ฟเวอร์และไคลเอนต์ ทำให้สามารถถ่ายโอนข้อมูลระหว่างทั้งสองได้
- FIN-WAIT-1: เซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตนี้กำลังรอคำขอยกเลิกการเชื่อมต่อจากซ็อกเก็ตระยะไกล หรือการยอมรับคำขอยกเลิกการเชื่อมต่อที่ส่งมาจากซ็อกเก็ตนี้ก่อนหน้านี้
- FIN-WAIT-2: เซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตนี้กำลังรอคำขอยกเลิกการเชื่อมต่อจากซ็อกเก็ตระยะไกล
- CLOSE-WAIT: เซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตนี้กำลังรอคำขอยกเลิกการเชื่อมต่อจากผู้ใช้ในพื้นที่
- การปิด: เซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตนี้กำลังรอการตอบรับคำขอยกเลิกการเชื่อมต่อจากซ็อกเก็ตระยะไกล
- LAST-ACK: เซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตนี้กำลังรอการรับทราบคำขอยกเลิกการเชื่อมต่อที่ส่งไปยังซ็อกเก็ตระยะไกล
- TIME-WAIT: เซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตนี้ส่งการตอบรับไปยังซ็อกเก็ตระยะไกลเพื่อแจ้งให้ทราบว่าได้รับคำขอยกเลิกจากซ็อกเก็ตระยะไกล ตอนนี้กำลังรอเพื่อให้แน่ใจว่าได้รับการตอบรับ
- ปิด: ไม่มีการเชื่อมต่อ ซ็อกเก็ตจึงถูกยกเลิก
รายชื่อซ็อกเก็ตการฟัง
หากต้องการดูซ็อกเก็ตการฟัง เราจะเพิ่มตัวเลือก -l
(การฟัง) เช่น:
ss -l
Netid State Recv-Q Send-Q ที่อยู่ในท้องถิ่น:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 4096 /run/systemd/private 13349 * 0 u_seq ฟัง 0 4096 /run/udev/control 13376 * 0 u_str ฟัง 0 4096 /tmp/.X11-unix/X0 33071 * 0 u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 u_str LISTEN 0 4096 /run/systemd/fsck.progress 13362 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 32303 * 0
ซ็อกเก็ตเหล่านี้ไม่ได้เชื่อมต่อและรับฟังทั้งหมด “rtnl” หมายถึงการกำหนดเส้นทาง netlink ซึ่งใช้ในการถ่ายโอนข้อมูลระหว่างกระบวนการเคอร์เนลและ userspace
รายการซ็อกเก็ตทั้งหมด
ในการแสดงรายการซ็อกเก็ตทั้งหมด คุณสามารถใช้ตัวเลือก -a
(ทั้งหมด):
ss -a
Netid State Recv-Q Send-Q ที่อยู่ในท้องถิ่น:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 100 สาธารณะ/showq 23222 * 0 u_str LISTEN 0 100 ส่วนตัว/ข้อผิดพลาด 23225 * 0 u_str LISTEN 0 100 ส่วนตัว/ลองใหม่อีกครั้ง 23228 * 0 ... udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* ... tcp LISTEN 0 128 [::]:ssh [::]:* tcp LISTEN 0 5 [::1]:ipp [::]:* tcp LISTEN 0 100 [::1]:smtp [::]:*
เอาต์พุตมีซ็อกเก็ตทั้งหมด โดยไม่คำนึงถึงสถานะ
แสดงรายการ TCP Sockets
คุณยังสามารถใช้ตัวกรองเพื่อแสดงเฉพาะซ็อกเก็ตที่ตรงกัน เราจะใช้ตัวเลือก -t
(TCP) ดังนั้นเฉพาะซ็อกเก็ต TCP เท่านั้นที่จะแสดงรายการ:
ss -a -t
แสดงรายการ UDP Sockets
อ็อพชัน -u
(UDP) ดำเนินการกรองประเภทเดียวกัน คราวนี้เราจะเห็นเฉพาะซ็อกเก็ต UDP:
ss -a -u
สถานะ Recv-Q Send-Q ที่อยู่ในท้องถิ่น:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต UNCONN 0 0 0.0.0.0:631 0.0.0.0:* UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* UNCONN 0 0 0.0.0.0:60734 0.0.0.0:* UNCONN 0 0 127.0.0.53%lo:โดเมน 0.0.0.0:* ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps UNCONN 0 0 [::]:mdns [::]:* UNCONN 0 0 [::]:51193 [::]:*
รายการ Unix Sockets
หากต้องการดูเฉพาะซ็อกเก็ต Unix คุณสามารถรวมตัวเลือก -x
(Unix) ดังที่แสดงด้านล่าง:
ss -a -x
Netid State Recv-Q Send-Q ที่อยู่ในท้องถิ่น:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 * 23183 * 23184 u_str ESTAB 28 0 @/tmp/.X11-unix/X0 52640 * 52639 ... u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306
แสดงรายการซ็อกเก็ตดิบ
ตัวกรองสำหรับซ็อกเก็ตดิบคือตัวเลือก -w
(ดิบ):
ss -a -w
รายการ IP เวอร์ชัน 4 Sockets
ซ็อกเก็ตที่ใช้โปรโตคอล TCP/IP เวอร์ชัน 4 สามารถแสดงรายการได้โดยใช้ตัวเลือก -4
(IPV4):
ss -a -4
รายการ IP เวอร์ชัน 6 Sockets
คุณสามารถเปิดตัวกรอง IP เวอร์ชัน 6 ที่ตรงกันด้วยตัวเลือก -6
(IPV6) เช่น:
ss -a -6
รายชื่อซ็อกเก็ตตามรัฐ
คุณสามารถแสดงรายการซ็อกเก็ตตามสถานะที่อยู่ในตัวเลือก state
ใช้งานได้กับสถานะที่จัดตั้งขึ้น ฟัง หรือปิด นอกจากนี้ เราจะใช้ตัวเลือกการแก้ไข ( -r
) ซึ่งพยายามแก้ไขที่อยู่เครือข่ายเป็นชื่อ และพอร์ตไปยังโปรโตคอล
คำสั่งต่อไปนี้จะค้นหาการเชื่อมต่อ TCP ที่สร้างขึ้น และ ss
จะพยายามแก้ไขชื่อ:
ss -t -r state จัดตั้งขึ้น
การเชื่อมต่อสี่รายการอยู่ในสถานะที่กำหนดไว้ ชื่อโฮสต์ ubuntu20-04 ได้รับการแก้ไขแล้วและแสดง "ssh" แทน 22 สำหรับการเชื่อมต่อ SSH ในบรรทัดที่สอง
เราสามารถทำซ้ำเพื่อค้นหาซ็อกเก็ตในสถานะการฟัง:
ss -t -r state ฟัง
Recv-Q Send-Q ที่อยู่ในพื้นที่:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต 0 128 localhost:5939 0.0.0.0:* 0 4096 localhost%lo:โดเมน 0.0.0.0:* 0 128 0.0.0.0:ssh 0.0.0.0:* 0 5 localhost:ipp 0.0.0.0:* 0 100 localhost:smtp 0.0.0.0:* 0 128 [::]:ssh [::]:* 0 5 ip6-localhost:ipp [::]:* 0 100 ip6-localhost:smtp [::]:*
แสดงรายการซ็อกเก็ตตามโปรโตคอล
คุณสามารถแสดงรายการซ็อกเก็ตโดยใช้โปรโตคอลเฉพาะพร้อมตัวเลือก dport
และ sport
ซึ่งแสดงถึงพอร์ตปลายทางและพอร์ตต้นทางตามลำดับ
เราพิมพ์ข้อมูลต่อไปนี้เพื่อแสดงรายการซ็อกเก็ตโดยใช้โปรโตคอล HTTPS ในการเชื่อมต่อที่ established
(สังเกตช่องว่างหลังวงเล็บเปิดและก่อนวงเล็บปิด):
ss -a state ที่จัดตั้งขึ้น '( dport = :https หรือ sport = :https )'
เราสามารถใช้ชื่อโปรโตคอลหรือพอร์ตที่มักจะเชื่อมโยงกับโปรโตคอลนั้น พอร์ตเริ่มต้นสำหรับ Secure Shell (SSH) คือพอร์ต 22
เราจะใช้ชื่อโปรโตคอลในคำสั่งเดียว แล้วทำซ้ำโดยใช้หมายเลขพอร์ต:
ss -a '( dport = :ssh หรือ sport = :ssh )'
ss -a '( dport = :22 หรือ sport = :22 )'
อย่างที่คาดไว้ เราจะได้ผลลัพธ์แบบเดียวกัน
แสดงรายการการเชื่อมต่อกับที่อยู่ IP เฉพาะ
ด้วยตัวเลือก dst
(ปลายทาง) เราสามารถแสดงรายการการเชื่อมต่อไปยังที่อยู่ IP ปลายทางเฉพาะ
เราพิมพ์ดังต่อไปนี้:
ss -a dst 192.168.4.25
การระบุกระบวนการ
หากต้องการดูว่ากระบวนการใดใช้ซ็อกเก็ตอยู่ คุณสามารถใช้ตัวเลือกกระบวนการ ( -p
) ดังที่แสดงด้านล่าง (โปรดทราบว่าคุณต้องใช้ sudo
):
sudo ss -t -p
สถานะ Recv-Q Send-Q ที่อยู่ในท้องถิ่น:ที่อยู่พอร์ตเพียร์:กระบวนการพอร์ต ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https ผู้ใช้:(("firefox",pid=3378,fd=151)) ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 ผู้ใช้:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
นี่แสดงให้เราเห็นว่าการเชื่อมต่อที่สร้างขึ้นทั้งสองบนซ็อกเก็ต TCP กำลังถูกใช้โดย SSH daemon และ Firefox
ผู้สืบทอดที่คู่ควร
คำสั่ง ss
ให้ข้อมูลเดียวกันกับที่ netstat
ให้มาก่อนหน้านี้ แต่เป็นวิธีที่ง่ายกว่าและเข้าถึงได้มากกว่า คุณสามารถตรวจสอบ man page สำหรับตัวเลือกและคำแนะนำเพิ่มเติม
คำสั่งลินุกซ์ | ||
ไฟล์ | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · เข้าร่วม · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · ดู · strings · พิมพ์ · เปลี่ยนชื่อ · zip · unzip · เมานต์ · umount · ติดตั้ง · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · แพทช์ · แปลง · rclone · ฉีก · srm | |
กระบวนการ | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · หมดเวลา · ผนัง · ใช่ · ฆ่า · หลับ · sudo · su · เวลา · groupadd · usermod · กลุ่ม · lshw · ปิดระบบ · รีบูต · หยุด · poweroff · passwd · lscpu · crontab · วันที่ · bg · fg | |
ระบบเครือข่าย | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
ที่เกี่ยวข้อง: แล็ปท็อป Linux ที่ดีที่สุดสำหรับนักพัฒนาและผู้ที่ชื่นชอบ