Hướng dẫn sử dụng lệnh netstat Linux cho người mới bắt đầu (8 ví dụ)

theanh

Administrator
Nhân viên
Nếu bạn mới làm quen với dòng lệnh Linux và muốn tìm hiểu về mạng, có nhiều tiện ích dòng lệnh mà bạn nên biết. Một trong những công cụ như vậy là netstat. Trong bài viết này, chúng ta sẽ thảo luận về lệnh này bằng một số ví dụ dễ hiểu.

Nhưng trước khi làm điều đó, cần đề cập rằng tất cả các ví dụ này đều đã được thử nghiệm trên máy Ubuntu 16.04 LTS.

Lệnh netstat Linux​

Lệnh netstat cho phép bạn in các kết nối mạng, bảng định tuyến, số liệu thống kê giao diện, kết nối giả mạo và tư cách thành viên đa hướng. Sau đây là cú pháp của lệnh:
Mã:
netstat [OPTIONS]
Đây là cách trang hướng dẫn giải thích lệnh này:
Mã:
Netstat in thông tin về hệ thống mạng con Linux. Loại thông tin được in ra được kiểm soát bởi đối số đầu tiên, như sau:

 (không có)
 Theo mặc định, netstat hiển thị danh sách các socket mở. Nếu bạn không
 chỉ định bất kỳ họ địa chỉ nào, thì các socket đang hoạt động của tất cả các họ địa chỉ
 đã cấu hình sẽ được in ra.

 --route , -r
 Hiển thị các bảng định tuyến hạt nhân. Xem mô tả trong route(8) để biết
 chi tiết. netstat -r và route -e tạo ra cùng một đầu ra.

 --groups , -g
 Hiển thị thông tin thành viên nhóm đa hướng cho IPv4 và IPv6.

 --interfaces, -i
 Hiển thị bảng của tất cả các giao diện mạng.

 --masquerade , -M
 Hiển thị danh sách các kết nối được ngụy trang.

 --statistics , -s
 Hiển thị số liệu thống kê tóm tắt cho từng giao thức.
Sau đây là một số ví dụ theo kiểu Hỏi & Đáp sẽ giúp bạn hiểu rõ hơn về cách lệnh netstat hoạt động.

Câu hỏi 1. Làm thế nào để sử dụng lệnh netstat?​

Cách sử dụng cơ bản khá đơn giản - chỉ cần chạy lệnh netstat mà không cần bất kỳ tùy chọn nào.
Mã:
netstat
Ví dụ, trong trường hợp của tôi, đầu ra sau được tạo ra:
Mã:
Kết nối Internet đang hoạt động (không có máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Trạng thái 
tcp 0 0 192.168.1.7:59510 mails11.telegram.:https ESTABLISHED
tcp 0 0 192.168.1.7:57318 13.70.5.200:https ESTABLISHED
tcp 0 1 192.168.1.7:51238 52.114.32.7:https SYN_SENT 
tcp 390 0 192.168.1.7:60392 del03s09-in-f10.1:https ĐÃ THÀNH LẬP
tcp 0 1 192.168.1.7:51240 52.114.32.7:https ĐÃ GỬI SYN 
tcp 0 0 192.168.1.7:50196 del03s10-in-f10.1:https THỜI GIAN CHỜ 
tcp 0 0 192.168.1.7:41996 maa05s05-in-f4.1e:https THỜI GIAN CHỜ 
tcp 0 0 192.168.1.7:56680 wa-in-f94.1e100.n:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:54578 del03s10-in-f14.1:https TIME_WAIT 
tcp 0 0 192.168.1.7:51310 del03s10-in-f2.1e:https TIME_WAIT
Vì vậy, theo mặc định, lệnh sẽ hiển thị danh sách tất cả các socket đang mở.

Câu hỏi 2. Làm thế nào để netstat hiển thị địa chỉ số?​

Theo mặc định, lệnh netstat sẽ cố gắng xác định tên máy chủ tượng trưng, cổng hoặc tên người dùng. Điều này có thể làm chậm công cụ. Tuy nhiên, nếu bạn ổn với các giá trị số, bạn có thể khiến công cụ xuất ra các giá trị số bằng cách sử dụng tùy chọn dòng lệnh -n.
Mã:
netstat -n
Ví dụ trong trường hợp của tôi, đầu ra sau đây đã được tạo ra:
Mã:
Kết nối Internet đang hoạt động (không có máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Trạng thái 
tcp 0 0 192.168.1.7:59510 149.154.171.22:443 ESTABLISHED
tcp 0 0 192.168.1.7:57318 13.70.5.200:443 ESTABLISHED
tcp 0 0 192.168.1.7:51682 52.114.32.7:443 TIME_WAIT 
tcp 0 0 192.168.1.7:54884 172.217.161.14:443 TIME_WAIT 
tcp 0 0 192.168.1.7:35112 172.217.161.5:443 ĐÃ THIẾT LẬP
tcp 0 0 192.168.2.97:45662 148.251.237.53:21 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:50892 149.154.164.224:443 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:58772 172.217.194.189:443 TIME_WAIT 
tcp 0 1 192.168.1.7:47728 144.76.158.93:443 ĐÃ GỬI ĐỒNG BỘ 
tcp 0 1 192.168.1.7:47730 144.76.158.93:443 ĐÃ GỬI ĐỒNG BỘ 
tcp 0 0 192.168.1.7:59548 149.154.171.22:443 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:35818 169.55.74.50:443 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:50888 149.154.164.224:443 ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:44156 152.195.11.6:443 ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:58478 52.229.174.94:443 ĐÃ THÀNH LẬP
tcp 52 0 127.0.0.1:60342 127.0.1.1:139 ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:58820 172.217.161.3:443 ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:45588 52.175.17.224:443 TIME_WAIT 
tcp 0 0 192.168.1.7:50890 149.154.164.224:443 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:58192 52.77.195.144:443 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:54224 172.217.31.2:443 ĐÃ THIẾT LẬP
tcp 0 0 127.0.1.1:139 127.0.0.1:60342 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:34500 192.241.190.153:443 ESTABLISHED
tcp 0 0 192.168.1.7:54888 172.217.161.14:443 ESTABLISHED
Vì vậy, bạn chỉ có thể thấy các giá trị số được tạo ra trong đầu ra (trong cột Địa chỉ nước ngoài) lần này.

Câu hỏi 3. Làm thế nào để netstat chỉ hiển thị các kết nối tcp?​

Bạn có thể thực hiện việc này bằng tùy chọn dòng lệnh -t.
Mã:
netstat -t
Ví dụ, trong trường hợp của tôi, đầu ra sau được tạo ra:
Mã:
Kết nối Internet đang hoạt động (không có máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Trạng thái địa chỉ nước ngoài 
tcp 0 0 192.168.1.7:44236 152.195.11.6:https ESTABLISHED
tcp 0 0 192.168.1.7:59510 mails11.telegram.:https ESTABLISHED
tcp 0 0 192.168.1.7:57318 13.70.5.200:https ESTABLISHED
tcp 0 0 192.168.1.7:42706 maa05s05-in-f4.1e:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:51984 del03s10-in-f2.1e:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:51786 52.114.32.7:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:52294 xx-fbcdn-shv-01-m:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:54372 del03s01-in-f2.1e:https ĐÃ THÀNH LẬP
tcp 0 1 192.168.1.7:47788 hyperserver.semse:https SYN_SENT 
tcp 0 0 192.168.1.7:52298 xx-fbcdn-shv-01-m:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:51840 149.154.164.224:https TIME_WAIT 
tcp 0 0 192.168.1.7:35258 del03s10-in-f1.1e:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.2.97:45662 blog.gsmarena.com:ftp ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:50728 del03s10-in-f10.1:https TIME_WAIT 
tcp 0 0 192.168.1.7:56468 del03s09-in-f3.1e:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:50892 149.154.164.224:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:45670 52.175.17.224:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:55180 del03s10-in-f14.1:https TIME_WAIT 
tcp 0 1 192.168.1.7:47790 hyperserver.semse:https SYN_SENT 
tcp 0 0 192.168.1.7:59548 mails11.telegram.:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:35818 32.4a.37a9.ip4.st:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:50888 149.154.164.224:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:33360 del03s10-in-f13.1:https TIME_WAIT 
tcp 0 0 192.168.1.7:52332 207.46.140.70:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:58478 52.229.174.94:https ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:54374 del03s01-in-f2.1e:https THỜI GIAN CHỜ 
tcp 0 0 192.168.1.7:50216 104.24.1.68:https THỜI GIAN CHỜ 
tcp 52 0 localhost:60342 ansh:netbios-ssn ĐÃ THÀNH LẬP
tcp 0 0 192.168.1.7:50890 149.154.164.224:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:55200 del03s10-in-f14.1:https THỜI GIAN CHỜ 
tcp 0 0 192.168.1.7:54224 del03s01-in-f2.1e:https ĐÃ THIẾT LẬP
tcp 0 0 ansh:netbios-ssn localhost:60342 ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:55212 del03s10-in-f14.1:https THỜI GIAN CHỜ 
tcp 0 1 192.168.1.7:47800 hyperserver.semse:https ĐÃ GỬI ĐỒNG BỘ 
tcp 0 0 192.168.1.7:45668 52.175.17.224:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:58878 del03s10-in-f3.1e:https TIME_WAIT 
tcp 0 0 192.168.1.7:34500 do-11.lastpass.co:https ĐÃ THIẾT LẬP
tcp 0 0 192.168.1.7:41844 a23-35-40-198.dep:https ĐÃ THIẾT LẬP

Câu hỏi 4. Cách để netstat chỉ hiển thị các kết nối udp​

Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -u.
Mã:
netstat -u

Câu hỏi 5. Làm thế nào để netstat chỉ hiển thị các socket đang lắng nghe?​

Điều này có thể thực hiện được bằng cách sử dụng tùy chọn dòng lệnh -l.
Mã:
netstat -l
Ví dụ, đầu ra sau được tạo ra trong trường hợp của tôi:
Mã:
Kết nối Internet đang hoạt động (chỉ máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Trạng thái địa chỉ nước ngoài 
tcp 0 0 ansh:domain *:* LISTEN 
tcp 0 0 localhost:ipp *:* LISTEN 
tcp 0 0 *:microsoft-ds *:* LISTEN 
tcp 0 0 *:netbios-ssn *:* LISTEN 
tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN 
tcp6 0 0 [::]:microsoft-ds [::]:* LISTEN 
tcp6 0 0 [::]:netbios-ssn [::]:* LISTEN 
...
...
...

Câu hỏi 6. Làm thế nào để netstat hiển thị tên và PID của các chương trình?​

Trong trường hợp bạn muốn netstat hiển thị tên của ID tiến trình của các tiến trình mà mỗi socket thuộc về, hãy sử dụng tùy chọn dòng lệnh -p.
Mã:
netstat -p
Ví dụ:
Mã:
Kết nối Internet đang hoạt động (không có máy chủ)
Proto Recv-Q Send-Q Địa chỉ cục bộ Địa chỉ nước ngoài Trạng thái PID/Tên chương trình
tcp 0 0 192.168.1.7:57318 13.70.5.200:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:36732 13.76.170.95:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:52050 149.154.164.224:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:55974 del03s10-in-f14.1:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:52074 149.154.164.224:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:60590 mails11.telegram.:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:52254 149.154.164.224:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.2.97:45662 blog.gsmarena.com:ftp ĐÃ THÀNH LẬP 3160/filezilla 
tcp 0 0 192.168.1.7:35818 32.4a.37a9.ip4.st:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:52528 52.114.32.7:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:55950 del03s10-in-f14.1:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 68 0 localhost:60342 ansh:netbios-ssn ĐÃ THÀNH LẬP 2625/gvfsd-smb-brow
tcp 0 0 192.168.1.7:44974 152.195.11.6:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:36730 13.76.170.95:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 ansh:netbios-ssn localhost:60342 ĐÃ THÀNH LẬP - 
tcp 0 0 192.168.1.7:52732 del03s10-in-f2.1e:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:60314 52.229.174.94:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:53072 207.46.140.70:https ĐÃ THÀNH LẬP 3247/firefox 
tcp 0 0 192.168.1.7:34500 do-11.lastpass.co:https ĐÃ THÀNH LẬP 3247/firefox
Xem cột cuối cùng để biết thông tin về PID/tên chương trình.

Câu hỏi 7. Làm thế nào để netstat in số liệu thống kê mạng?​

Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -s.
Mã:
netstat -s
Trong trường hợp này, công cụ sẽ tạo ra thông tin như tổng số gói đã nhận, đã loại bỏ, đã phân phối và nhiều thông tin khác. Sau đây là một ví dụ về đầu ra khi tùy chọn dòng lệnh -s được sử dụng.
Mã:
Ip:
 Tổng số 592215 gói tin nhận được
 41 gói tin có địa chỉ không hợp lệ
 0 gói tin được chuyển tiếp
 0 gói tin đến bị loại bỏ
 580699 gói tin đến được phân phối
 539118 yêu cầu được gửi đi
 627 gói tin đi bị loại bỏ
 482 gói tin bị loại bỏ do thiếu tuyến đường
 2 phân đoạn không thành công
Icmp:
 Đã nhận 2337 tin nhắn ICMP
 6 tin nhắn ICMP đầu vào không thành công.
 Biểu đồ đầu vào ICMP:
 Không thể truy cập đích: 2337
 Đã gửi 3917 tin nhắn ICMP
 0 tin nhắn ICMP không thành công
 Biểu đồ đầu ra ICMP:
 Không thể truy cập đích: 3917
IcmpMsg:
 InType3: 2337
 OutType3: 3917
Tcp:
 10943 kết nối đang hoạt động mở
 127 kết nối thụ động mở
 38 nỗ lực kết nối không thành công
 467 kết nối được đặt lại đã nhận
 34 kết nối được thiết lập
 443643 phân đoạn đã nhận
 414589 phân đoạn được gửi đi
 6929 phân đoạn được truyền lại
 428 phân đoạn bị lỗi đã nhận.
 11713 đã gửi đặt lại

...
...
...

Câu 8. Làm thế nào để netstat hiển thị bảng định tuyến hạt nhân?​

Điều này có thể được thực hiện bằng cách sử dụng tùy chọn dòng lệnh -r.
Mã:
netstat -r
Sau đây là đầu ra được tạo ra trong trường hợp của tôi:
Mã:
Bảng định tuyến IP hạt nhân
Cổng đích Genmask Cờ MSS Cửa sổ irtt Iface
mặc định 192.168.1.1 0.0.0.0 UG 0 0 0 wlx18a6f713679b
liên kết cục bộ * 255.255.0.0 U 0 0 0 wlx18a6f713679b
192.168.1.0 * 255.255.255.0 U 0 0 0 wlx18a6f713679b
Lưu ý rằng netstat -rroute -e tạo ra cùng một đầu ra.

Kết luận​

Như bạn đã hiểu, lệnh netstat là một công cụ rất quan trọng. Nó cung cấp rất nhiều tính năng - chúng ta chỉ mới bắt đầu tìm hiểu ở đây. Sau khi bạn thực hành xong những gì chúng ta đã thảo luận trong hướng dẫn này, hãy đến trang hướng dẫn của công cụ để biết thêm thông tin.
 
Back
Bên trên