Linux Networking: Sử Dụng Netstat Quản Lý Mạng Trên Linux - Viblo
Có thể bạn quan tâm
netstat (network statistics) là một công cụ mạng nằm trong gói công cụ net-tools, sử dụng dòng lệnh, được sử dụng để khắc phục sự cố và cấu hình mạng. netstat là công cụ hoạt động đa nền tảng, được tích hợp sẵn trên các hệ điều hành Linux, Unix-Like và có sẵn trên cả Windows. Đây là một trong những công cụ gỡ lỗi dịch vụ mạng cơ bản nhất trên Unix/Linux, mạnh mẽ và rất hữu dụng đối với quản trị viên mạng Linux cũng như quản trị viên hệ thống trong việc giải quyết các vấn đề về sự cố liên quan đến network như là lượng connect kết nối, traffic, tốc độ, trạng thái của từng port, Ip... Nó cũng có thể được coi là một công cụ monitor, giúp giám sát các kết nối mạng (cả đến và đi) bằng cách cung cấp các thông tin như bảng định tuyến hay một số thống kê giao diện mạng.
Trong phạm vi bài viết này, mình sẽ cùng các bạn tìm hiểu sử dụng netstat trên hệ điều hành Linux nhé! ))
Note
Các tùy chọn thiết lập lệnh netstatHiện tại bộ công cụ iproute2 đã được thay thế mặc định cho bộ công cụ net-tools ở các bản phân phối Linux mới như RHEL7, CentOS 7,... Cùng với đó, công cụ ss mới cũng được sử dụng thay cho netstat với một số ưu điểm ưu điểm đơn giản hơn và nhanh hơn công cụ truyền thống netstat. Các chức năng và cách sử dụng của lệnh ss nhìn chung cũng tương tự như netstat.
Lệnh netstat được xây dựng với nhiều các cờ tùy chọn khác nhau, để xem thông tin sử dụng lệnh và các tùy chọn, bạn sẽ dử dụng netstat -h hoặc netstat --help
thanhthu ~ netstat -h usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} netstat [-vWnNcaeol] [<Socket> ...] netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] } -r, --route display routing table -i, --interfaces display interface table -g, --groups display multicast group memberships -s, --statistics display networking statistics (like SNMP) -M, --masquerade display masqueraded connections -v, --verbose be verbose -W, --wide don't truncate IP addresses -n, --numeric don't resolve names --numeric-hosts don't resolve host names --numeric-ports don't resolve port names --numeric-users don't resolve user names -N, --symbolic resolve hardware names -e, --extend display other/more information -p, --programs display PID/Program name for sockets -o, --timers display timers -c, --continuous continuous listing -l, --listening display listening server sockets -a, --all display all sockets (default: connected) -F, --fib display Forwarding Information Base (default) -C, --cache display routing cache instead of FIB -Z, --context display SELinux security context for sockets <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet List of possible address families (which support routing): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)Có rất nhiều tùy chọn, một số tùy chọn phổ biến thường được sử dụng mà bạn có thể chú ý ở đây là
- -a: Hiển thị tất cả các sockets, kể cả listening và non-listening
- -l: Hiển thị các socket đang lắng nghe
- -t: Chỉ hiển thị các kết nối tcp
- -u: Chỉ hiển thị các kết nối udp
- -n: Xem địa chỉ số (không phân giải)
- -p: Hiển thị chương trình PID cho từng socket
- -r: Hiển thị bảng định tuyến
- -s: Pull và hiển thị thống kê mạng được sắp xếp theo giao thức
- -i: Hiển thị danh sách các giao diện mạng
Tiếp theo, mình sẽ chỉ cho các bạn một vài ví dụ cụ thể trong việc sử dụng lệnh netstat này nha!
Các ví dụ lệnh netstat thường được sử dụng1. Liệt kê tất cả các port
- netstat -a
Đây là một lệnh kiểm tra tổng quá, nó bao gồm rất rất nhiều thông tin bao gồm tất cả các port ( của cả giao thức TCP và UDP), các listening và non-listening sockets. Bởi vì bao gồm rất nhiêu thứ nên trong thực tế, khi sử dụng , ta sẽ kết hợp tùy chọn cùng các tùy chọn khác để lọc ra các nhóm thông tin cụ thể cũng như chi tiết hơn như các lệnh dưới đây.
- netstat -at: Chỉ kiểm tra các port TCP
- netstat -au: Chỉ kiểm tra các port UDP
- netstat -l: Đây là tùy chọn có phạm vi nhỏ hơn -a khi chỉ liệt kê các port đang ở trạng thái listening. Tùy chọn này cũng thường đi kèm với tùy chọn -t hay -u để lọc ra các kết nối TCP hay UDP.
Kiểm tra các tiến trình
Sử dụng tùy chọn -p của netstat sẽ hiển thị cho chúng ta thấy tên chương trình và process ID (PID) của chúng. Chẳng hạn như ta sử dụng lệnh netstat -ltupn. Lệnh này có ý nghĩa sẽ hiển thị tất cả port TCP và UDP đang ở trạng thái listening cùng với tên chương trình và PID của chúng. Ở đây mình hay dùng thêm tùy chọn -n để hiển thị các địa chỉ và số cổng được biểu diễn dưới dạng số, mà không hiển thị một tên cụ thể.
thanhthu ~ netstat -pltun Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 664/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1271/sshd tcp 0 0 0.0.0.0:32182 0.0.0.0:* LISTEN 2945/k3s tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 27507/cupsd tcp 0 0 127.0.0.1:40131 0.0.0.0:* LISTEN 2945/k3s tcp 0 0 0.0.0.0:32196 0.0.0.0:* LISTEN 2945/k3s tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 2945/k3s tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 2945/k3s tcp 0 0 127.0.0.1:35947 0.0.0.0:* LISTEN 966/containerd tcp 0 0 127.0.0.1:6444 0.0.0.0:* LISTEN 2945/k3s tcp 0 0 127.0.0.1:10256 0.0.0.0:* LISTEN 2945/k3s tcp6 0 0 :::22 :::* LISTEN 1271/sshd tcp6 0 0 ::1:631 :::* LISTEN 27507/cupsd tcp6 0 0 :::10250 :::* LISTEN 2945/k3s tcp6 0 0 :::3306 :::* LISTEN 3678/docker-proxy tcp6 0 0 :::10251 :::* LISTEN 2945/k3s tcp6 0 0 :::6443 :::* LISTEN 2945/k3s tcp6 0 0 :::10252 :::* LISTEN 2945/k3s udp 0 0 127.0.0.53:53 0.0.0.0:* 664/systemd-resolve udp 0 0 0.0.0.0:68 0.0.0.0:* 30433/dhclient udp 0 0 0.0.0.0:8472 0.0.0.0:* - udp 0 0 0.0.0.0:631 0.0.0.0:* 27508/cups-browsed udp 0 0 0.0.0.0:43286 0.0.0.0:* 816/avahi-daemon: r udp 0 0 224.0.0.251:5353 0.0.0.0:* 25223/chrome udp 0 0 224.0.0.251:5353 0.0.0.0:* 25223/chrome udp 0 0 224.0.0.251:5353 0.0.0.0:* 25329/chrome --type udp 0 0 224.0.0.251:5353 0.0.0.0:* 25329/chrome --type udp 0 0 0.0.0.0:5353 0.0.0.0:* 816/avahi-daemon: r udp6 0 0 :::43431 :::* 816/avahi-daemon: r udp6 0 0 :::5353 :::* 816/avahi-daemon: rHiển thị thống kê mạng
Để hiển thị các thông tin thống kê mạng, chúng ta sử dụng lệnh netstat -s hoặc cũng có thể lọc thông tin theo các kết nối TCP, UDP...
thanhthu ~ netstat -s Ip: Forwarding: 1 882951 total packets received 1 with invalid addresses 129399 forwarded 0 incoming packets discarded 752132 incoming packets delivered 851013 requests sent out 280 dropped because of missing route 2 reassemblies required 1 packets reassembled ok Icmp: 115 ICMP messages received 30 input ICMP message failed ICMP input histogram: destination unreachable: 110 echo requests: 2 echo replies: 3 353 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 348 echo requests: 3 echo replies: 2 IcmpMsg: InType0: 3 InType3: 110 InType8: 2 OutType0: 2 .....................Hiển thị bảng định tuyến
Để xem bảng định tuyến IP của kernel, chúng ta sử dụng lệnh netstat -r :
thanhthu ~ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default _gateway 0.0.0.0 UG 0 0 0 enp1s0 10.42.0.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0 link-local 0.0.0.0 255.255.0.0 U 0 0 0 enp1s0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0eadd6bb4887 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-d21d6936f375 192.168.19.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0Hiển thị các giao diện mạng
Để hiển thị các giao diện mạng của kernel, chúng ta sử dụng lệnh netstat -i
thanhthu ~ netstat -i Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg br-0eadd 1500 1 0 0 0 629 0 0 0 BMRU br-d21d6 1500 0 0 0 0 0 0 0 0 BMU cni0 1450 360459 0 0 0 370384 0 0 0 BMRU docker0 1500 0 0 0 0 0 0 0 0 BMU enp1s0 1500 521818 0 647 0 229844 0 0 0 BMRU flannel. 1450 0 0 0 0 0 0 625 0 BMRU lo 65536 435776 0 0 0 435776 0 0 0 LRU veth8509 1450 93651 0 0 0 47643 0 0 0 BMRU veth0698 1450 15316 0 0 0 15264 0 0 0 BMRUNetstat kết hợp cùng các lệnh linux khác
Ngoài kết hợp giữa các tùy chọn chỉ thị lệnh khác nhau, netstat càng trở nên hữu dụng hơn khi được kết hợp với các lệnh linux khác bằng cách sử dụng cơ chế đường ống pipe trong linux. Ví dụ:
- Khi bạn muốn kiểm tra một cổng cụ thể, chẳng hạn như cổng 22:
- Hiện thị số kết nối của mỗi ip đến server
Trong đó:
- netstat -apn: Hiển thị tất cả các kết nối cùng tên chương trình và PID của chúng, các địa chỉ ip và port ở dạng số, không phân giải tên.
- grep 'tcp\|udp': Lọc lấy các kết nối TCP và UDP
- awk '{print $5}': Chỉ in ra cột số 5 là cột IP:PORT
- cut -d: -f1: Chia các dòng kết quả thành các cột, điểm phân chia là ký tự : sau đó lấy thông tin cột 1 (các IP không có cổng)
- sort: sắp xếp kết quả
- uniq -c: nhóm các IP giống nhau lại, hiển thị ra cột đầu tiên sẽ hiển thị số lượng của các IP giống nhau
- sort -n: sắp xếp kết quả theo số, từ thấp đến cao
Qua bài viết trên, mình đã giới thiệu đến các bạn các chức năng cũng như cách dùng cơ bản của netstat. Hy vọng qua bài viết này, các bạn có thể hiểu và nắm rõ hơn về netstat - một phương pháp kinh điển để khắc phục các sự cố về mạng trên hệ điều hành Unix/Linux.
Cảm ơn các bạn đã theo dõi bài viết của mình :3
References- https://linux.die.net/man/8/netstat
- https://www.rekha.com/netstat-cheat-sheet-for-newbies.html
Từ khóa » Các Lệnh Netstat Cơ Bản
-
Netstat Là Gì? Các Lệnh Netstat Thường Dùng
-
Lệnh Netstat Trong Windows
-
Netstat Là Gì? Sử Dụng Lệnh Netstat Trên Windows | BKHOST
-
Lệnh Netstat Trong Windows - Thủ Thuật Phần Mềm
-
Hướng Dẫn Sử Dụng Lệnh NETSTAT Trên Windows Quản Lý Mạng
-
Hướng Dẫn Đọc Hiểu Lệnh Netstat Trên Linux
-
Tổng Hợp Các Lệnh Netstat Trong Linux để Giám Sát Và Quản Lý Mạng
-
Lệnh Netstat Trong Cmd
-
Cách Sử Dụng Lệnh Netstat - EYEWATED.COM
-
Cách Sử Dụng Lệnh Netstat - LàM THẾ NàO ĐỂ 2022
-
Các Lệnh Netstat để Quản Lý Mạng Trên Linux
-
[Netstat] Lệnh Netstat Trên Windows - Kiến Thức System
-
Hướng Dẫn Dùng Lệnh Netstat để Quản Lý Mạng Trên CentOS 6
-
Cách Sử Dụng Lệnh Netstat - Máy Tính