Seien Sie nicht überrascht, wenn Ihr Computer manchmal Datagramme empfängt, die fehlerhafte Daten oder Fehlfunktionen verursachen. TCP/IP kann diese Art von Fehlern tolerieren und Datagramme automatisch erneut senden. Wenn jedoch die kumulative Anzahl von Fehlerbedingungen einen großen Prozentsatz der empfangenen IP-Datagramme ausmacht oder wenn ihre Zahl schnell zunimmt, sollten Sie Netstat verwenden, um herauszufinden, warum diese Bedingungen auftreten.
1. Befehlsformat:
netstat [-acCeFghilMnNoprstuvVwx][-A
2. Befehlsfunktion:
netstat wird verwendet, um statistische Daten im Zusammenhang mit den Protokollen IP, TCP, UDP und ICMP anzuzeigen. Es wird im Allgemeinen verwendet, um die Netzwerkverbindung jedes Ports der Maschine zu überprüfen.
3. Befehlsparameter:
-a oder –all zeigt alle verbundenen Sockets an.
-A
-c oder –continuous listet den Netzwerkstatus kontinuierlich auf.
-C oder –cache zeigt die Cache-Informationen der Router-Konfiguration an.
-e oder –extend zeigt andere verwandte Informationen über das Netzwerk an.
-F oder –fib zeigt FIB an.
-g oder –groups zeigt die Liste der Mitglieder der Multicast-Funktionsgruppe an.
-h oder –help Online-Hilfe.
-i oder –interfaces zeigt das Informationsformular der Netzwerkschnittstelle an.
-l oder –listening zeigt den Socket des überwachten Servers an.
-M oder –masquerade zeigt maskierte Netzwerkverbindungen an.
-n oder –numeric verwendet die IP-Adresse direkt, ohne den Domänennamenserver zu durchlaufen.
-N oder –netlink oder –symbolic zeigt den symbolischen Linknamen des Netzwerk-Hardware-Peripheriegeräts an.
-o oder –timers zeigt Timer an.
-p oder –programs zeigt den Programmidentifikationscode und den Programmnamen an, die Socket verwenden.
-r oder –route zeigt die Routing-Tabelle an.
-s oder –statistice zeigt eine Statistiktabelle mit Netzwerkarbeitsinformationen an.
-t oder –tcp zeigt den Verbindungsstatus des TCP-Übertragungsprotokolls an.
-u oder –udp zeigt den Verbindungsstatus des UDP-Übertragungsprotokolls an.
-v oder –verbose zeigt den Befehlsausführungsprozess an.
-V oder –version zeigt Versionsinformationen an.
-w oder –raw zeigt den Verbindungsstatus des RAW-Übertragungsprotokolls an.
-x oder –unix Die Wirkung dieses Parameters ist dieselbe wie die Angabe des Parameters „-A Unix“.
–ip oder –inet Die Wirkung dieses Parameters ist dieselbe wie die Angabe des Parameters „-A inet“.
4. Anwendungsbeispiel:
Beispiel 1: Verwenden Sie den Befehl
ohne Parameter: netstat
Ausgabe:
[root@localhost ~]# netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 268 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED udp 0 0 192.168.120.204:4371 10.58.119.119:domain ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd unix 4 [ ] DGRAM 7337 /dev/log unix 2 [ ] DGRAM 708823 unix 2 [ ] DGRAM 7539 unix 3 [ ] STREAM CONNECTED 7287 unix 3 [ ] STREAM CONNECTED 7286 [root@localhost ~]#
Erklärung:
Von Insgesamt lassen sich die Ausgabeergebnisse von netstat in zwei Teile unterteilen:
Einer sind aktive Internetverbindungen, sogenannte aktive TCP-Verbindungen, wobei sich „Recv-Q“ und „Send-Q“ auf Empfangswarteschlangen und Sendewarteschlangen beziehen . Diese Zahlen sollten im Allgemeinen 0 sein. Wenn nicht, bedeutet das, dass sich die Pakete in der Warteschlange stapeln. Diese Situation kommt nur in sehr seltenen Fällen vor.
Das andere sind aktive UNIX-Domänen-Sockets, sogenannte aktive Unix-Domänen-Sockets (identisch mit Netzwerk-Sockets, können aber nur für die lokale Kommunikation verwendet werden und die Leistung kann verdoppelt werden).
Proto zeigt das für die Verbindung verwendete Protokoll an, RefCnt stellt die mit diesem Socket verbundene Prozessnummer dar, Types zeigt den Typ des Sockets an, State zeigt den aktuellen Status des Sockets an und Path stellt die Verwendung anderer Prozesse dar mit dem Pfadnamen verbunden.
Socket-Typ:
-t: TCP
-u: UDP
-raw: RAW-Typ
--unix : UNIX-Domänentyp
--ax25: AX25-Typ
--ipx: IPX-Typ
--netrom: Netrom-Typ
Statusbeschreibung:
LISTEN: Auf Verbindungsanfragen von Remote-TCP-Ports lauschen
SYN-SENT: Warten Sie nach dem Senden einer Verbindungsanfrage auf eine passende Verbindungsanfrage (wenn es eine große Anzahl solcher Statuspakete gibt, prüfen Sie, ob Sie werden abgefangen) )
SYN-RECEIVED: Warten Sie nach dem Empfangen und Senden einer Verbindungsanforderung auf die Bestätigung der Verbindungsanforderung durch die andere Partei (wenn es eine große Anzahl dieser Status gibt, wird davon ausgegangen, dass sie überflutet ist).
HERGESTELLT: Vertreter Eine offene Verbindung
FIN-WAIT-1: Warten auf eine Verbindungsunterbrechungsanforderung vom Remote-TCP oder Bestätigung einer vorherigen Verbindungsunterbrechungsanforderung
FIN -WAIT-2: Warten auf eine Verbindungsunterbrechungsanforderung vom Remote-TCP
CLOSE-WAIT: Warten auf eine Verbindungsunterbrechungsanforderung vom lokalen Benutzer
CLOSING: Warten auf die Bestätigung des Remote-TCP die Verbindungsunterbrechung
LAST-ACK: Warten auf die ursprüngliche Anfrage Bestätigung der Verbindungsunterbrechungsanforderung an den Remote-TCP (keine gute Sache, wenn dieses Element erscheint, prüfen Sie, ob es angegriffen wird)
TIME-WAIT: Warten Sie genügend Zeit, um sicherzustellen, dass der Remote-TCP die Bestätigung der Verbindungsunterbrechungsanforderung erhält
GESCHLOSSEN: Kein Verbindungsstatus
Beispiel 2: Alle auflisten ports
Befehl: netstat -a
Ausgabe:
[root@localhost ~]# netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:smux *:* LISTEN tcp 0 0 *:svn *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 284 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED udp 0 0 localhost:syslog *:* udp 0 0 *:snmp *:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 708833 /tmp/ssh-yKnDB15725/agent.15725 unix 2 [ ACC ] STREAM LISTENING 7296 /var/run/audispd_events unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd unix 4 [ ] DGRAM 7337 /dev/log unix 2 [ ] DGRAM 708823 unix 2 [ ] DGRAM 7539 unix 3 [ ] STREAM CONNECTED 7287 unix 3 [ ] STREAM CONNECTED 7286 [root@localhost ~]#
Beschreibung:
Zeigt eine Liste aller gültigen Verbindungsinformationen an, einschließlich bestehender Verbindungen ( ESTABLISHED) und die Verbindungen, die auf Verbindungen warten (LISTENING).
Beispiel 3: Aktuellen UDP-Verbindungsstatus anzeigen
Befehl: netstat -nu
Ausgabe:
[root@andy ~]# netstat -nu Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 ::ffff:192.168.12:53392 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:56723 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:56480 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:58154 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:44227 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:36954 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:53984 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:57703 ::ffff:192.168.9.120:10000 ESTABLISHED udp 0 0 ::ffff:192.168.12:53613 ::ffff:192.168.9.120:10000 ESTABLISHED [root@andy ~]#
Beispiel 4: UDP-Port anzeigen Anzahl Verwendung
Befehl: netstat -apu
Ausgabe:
[root@andy ~]# netstat -apu Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 *:57604 *:* 28094/java udp 0 0 *:40583 *:* 21220/java udp 0 0 *:45451 *:* 14583/java udp 0 0 ::ffff:192.168.12:53392 ::ffff:192.168.9.120:ndmp ESTABLISHED 19327/java udp 0 0 *:52370 *:* 15841/java udp 0 0 ::ffff:192.168.12:56723 ::ffff:192.168.9.120:ndmp ESTABLISHED 15841/java udp 0 0 *:44182 *:* 31757/java udp 0 0 *:48155 *:* 5476/java udp 0 0 *:59808 *:* 17333/java udp 0 0 ::ffff:192.168.12:56480 ::ffff:192.168.9.120:ndmp ESTABLISHED 28094/java udp 0 0 ::ffff:192.168.12:58154 ::ffff:192.168.9.120:ndmp ESTABLISHED 15429/java udp 0 0 *:36780 *:* 10091/java udp 0 0 *:36795 *:* 24594/java udp 0 0 *:41922 *:* 20506/java udp 0 0 ::ffff:192.168.12:44227 ::ffff:192.168.9.120:ndmp ESTABLISHED 17333/java udp 0 0 *:34258 *:* 8866/java udp 0 0 *:55508 *:* 11667/java udp 0 0 *:36055 *:* 12425/java udp 0 0 ::ffff:192.168.12:36954 ::ffff:192.168.9.120:ndmp ESTABLISHED 16532/java udp 0 0 ::ffff:192.168.12:53984 ::ffff:192.168.9.120:ndmp ESTABLISHED 20506/java udp 0 0 ::ffff:192.168.12:57703 ::ffff:192.168.9.120:ndmp ESTABLISHED 31757/java udp 0 0 ::ffff:192.168.12:53613 ::ffff:192.168.9.120:ndmp ESTABLISHED 3199/java udp 0 0 *:56309 *:* 15429/java udp 0 0 *:54007 *:* 16532/java udp 0 0 *:39544 *:* 3199/java udp 0 0 *:43900 *:* 19327/java [root@andy ~]#
Beispiel 5: Netzwerkkartenliste anzeigen
Befehl: netstat -i
Ausgabe:
[root@andy ~]# netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 151818887 0 0 0 198928403 0 0 0 BMRU lo 16436 0 107235 0 0 0 107235 0 0 0 LRU [root@andy ~]#
Beispiel 6: Multicast-Gruppenbeziehungen anzeigen
命令:netstat -g
输出:
[root@andy ~]# netstat -g IPv6/IPv4 Group Memberships Interface RefCnt Group --------------- ------ --------------------- lo 1 all-systems.mcast.net eth0 1 all-systems.mcast.net lo 1 ff02::1 eth0 1 ff02::1:ffff:9b0c eth0 1 ff02::1 [root@andy ~]#
实例7:显示网络统计信息
命令:netstat -s
输出:
[root@localhost ~]# netstat -s Ip: 530999 total packets received 0 forwarded 0 incoming packets discarded 530999 incoming packets delivered 8258 requests sent out 1 dropped because of missing route Icmp: 90 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 17 echo requests: 1 echo replies: 72 106 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 8 echo request: 97 echo replies: 1 IcmpMsg: InType0: 72 InType3: 17 InType8: 1 OutType0: 1 OutType3: 8 OutType8: 97 Tcp: 8 active connections openings 15 passive connection openings 8 failed connection attempts 3 connection resets received 1 connections established 3132 segments received 2617 segments send out 53 segments retransmited 0 bad segments received. 252 resets sent Udp: 0 packets received 0 packets to unknown port received. 0 packet receive errors 5482 packets sent TcpExt: 1 invalid SYN cookies received 1 TCP sockets finished time wait in fast timer 57 delayed acks sent Quick ack mode was activated 50 times 60 packets directly queued to recvmsg prequeue. 68 packets directly received from backlog 4399 packets directly received from prequeue 520 packets header predicted 51 packets header predicted and directly queued to user 1194 acknowledgments not containing data received 21 predicted acknowledgments 0 TCP data loss events 1 timeouts after reno fast retransmit 9 retransmits in slow start 42 other TCP timeouts 3 connections aborted due to timeout IpExt: InBcastPkts: 527777
说明:
按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
实例8:显示监听的套接口
命令:netstat -l
输出:
[root@localhost ~]# netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:smux *:* LISTEN tcp 0 0 *:svn *:* LISTEN tcp 0 0 *:ssh *:* LISTEN udp 0 0 localhost:syslog *:* udp 0 0 *:snmp *:* Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 708833 /tmp/ssh-yKnDB15725/agent.15725 unix 2 [ ACC ] STREAM LISTENING 7296 /var/run/audispd_events [root@localhost ~]#
实例9:显示所有已建立的有效连接
命令:netstat -n
输出:
[root@localhost ~]# netstat -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 268 192.168.120.204:22 10.2.0.68:62420 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd unix 4 [ ] DGRAM 7337 /dev/log unix 2 [ ] DGRAM 708823 unix 2 [ ] DGRAM 7539 unix 3 [ ] STREAM CONNECTED 7287 unix 3 [ ] STREAM CONNECTED 7286 [root@localhost ~]#
实例10:显示关于以太网的统计数据
命令:netstat -e
输出:
[root@localhost ~]# netstat -e Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 248 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED root 708795 Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 1491 @/org/kernel/udev/udevd unix 4 [ ] DGRAM 7337 /dev/log unix 2 [ ] DGRAM 708823 unix 2 [ ] DGRAM 7539 unix 3 [ ] STREAM CONNECTED 7287 unix 3 [ ] STREAM CONNECTED 7286 [root@localhost ~]#
说明:
用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)
实例11:显示关于路由表的信息
命令:netstat -r
输出:
[root@localhost ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.120.0 * 255.255.255.0 U 0 0 0 eth0 192.168.0.0 192.168.120.1 255.255.0.0 UG 0 0 0 eth0 10.0.0.0 192.168.120.1 255.0.0.0 UG 0 0 0 eth0 default 192.168.120.240 0.0.0.0 UG 0 0 0 eth0 [root@localhost ~]#
实例12:列出所有 tcp 端口
命令:netstat -at
输出:
[root@localhost ~]# netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:smux *:* LISTEN tcp 0 0 *:svn *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 284 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED [root@localhost ~]#
实例13:统计机器中网络连接各个状态个数
命令:netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
输出:
[root@localhost ~]# netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ESTABLISHED 1 LISTEN 3 [root@localhost ~]#
实例14:把状态全都取出来后使用uniq -c统计后再进行排序
命令:netstat -nat |awk '{print $6}'|sort|uniq -c
输出:
[root@andy ~]# netstat -nat |awk '{print $6}'|sort|uniq -c 14 CLOSE_WAIT 1 established) 578 ESTABLISHED 1 Foreign 43 LISTEN 5 TIME_WAIT [root@andy ~]# netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn 576 ESTABLISHED 43 LISTEN 14 CLOSE_WAIT 5 TIME_WAIT 1 Foreign 1 established) [root@andy ~]#
实例15:查看连接某服务端口最多的的IP地址
命令:netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20
输出:
[root@andy ~]# netstat -nat | grep "192.168.120.20:16067" |awk '{print $5}'|awk -F: '{print $4}'|sort|uniq -c|sort -nr|head -20 8 10.2.1.68 7 192.168.119.13 6 192.168.119.201 6 192.168.119.20 6 192.168.119.10 4 10.2.1.199 3 10.2.1.207 2 192.168.120.20 2 192.168.120.15 2 192.168.119.197 2 192.168.119.11 2 10.2.1.206 2 10.2.1.203 2 10.2.1.189 2 10.2.1.173 1 192.168.120.18 1 192.168.119.19 1 10.2.2.227 1 10.2.2.138 1 10.2.1.208 [root@andy ~]#
实例16:找出程序运行的端口
命令:netstat -ap | grep ssh
输出:
[root@andy ~]# netstat -ap | grep ssh tcp 0 0 *:ssh *:* LISTEN 2570/sshd tcp 0 0 ::ffff:192.168.120.206:ssh ::ffff:10.2.1.205:54508 ESTABLISHED 13883/14 tcp 0 0 ::ffff:192.168.120.206:ssh ::ffff:10.2.0.68:62886 ESTABLISHED 20900/6 tcp 0 0 ::ffff:192.168.120.206:ssh ::ffff:10.2.2.131:52730 ESTABLISHED 20285/sshd: root@no unix 2 [ ACC ] STREAM LISTENING 194494461 20900/6 /tmp/ssh-cXIJj20900/agent.20900 unix 3 [ ] STREAM CONNECTED 194307443 20285/sshd: root@no unix 3 [ ] STREAM CONNECTED 194307441 20285/sshd: root@no [root@andy ~]#
实例17:在 netstat 输出中显示 PID 和进程名称
命令:netstat -pt
输出:
[root@localhost ~]# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 248 192.168.120.204:ssh 10.2.0.68:62420 ESTABLISHED 15725/0 [root@localhost ~]#
说明:
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
实例18:找出运行在指定端口的进程
命令:netstat -anpt | grep ':16064'
输出:
[root@andy ~]# netstat -anpt | grep ':16064' tcp 0 0 :::16064 :::* LISTEN 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.201:6462 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.20:26341 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.20:32208 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:192.168.119.20:32207 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:51303 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:51302 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50020 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50019 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:56155 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50681 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:50680 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:52136 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:56989 ESTABLISHED 24594/java tcp 0 0 ::ffff:192.168.120.20:16064 ::ffff:10.2.1.68:56988 ESTABLISHED 24594/java [root@andy ~]#
说明:
运行在端口16064的进程id为24596,再通过ps命令就可以找到具体的应用程序了。