Einführung
Der Netstat-Befehl wird verwendet, um verschiedene netzwerkbezogene Informationen anzuzeigen, wie z. B. Netzwerkverbindungen, Routing-Tabellen, Schnittstellenstatus (Interface Statistics), Masquerade-Verbindungen, Multicast-Mitgliedschaften (Multicast Memberships) usw.
Bedeutung der Ausgabeinformationen
Nach der Ausführung von netstat lautet das Ausgabeergebnis
Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 1 [ ] STREAM CONNECTED 16178 @000000dd unix 1 [ ] STREAM CONNECTED 16176 @000000dc unix 9 [ ] DGRAM 5292 /dev/log unix 1 [ ] STREAM CONNECTED 16182 @000000df
Im Großen und Ganzen kann das Ausgabeergebnis von netstat in zwei Teile unterteilt werden:
Eine davon sind aktive Internetverbindungen, sogenannte aktive TCP-Verbindungen, wobei sich „Recv-Q“ und „Send-Q“ auf die Empfangs- und Sendewarteschlange von %0A 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 Prozessnummer dar, die mit diesem Socket verbunden ist, Types zeigt den Typ des Sockets an, State zeigt den aktuellen Status des Sockets an und Path stellt den Pfadnamen dar, der von anderen verbundenen Prozessen verwendet wird zur Steckdose.
Gemeinsame Parameter
-a (alle) zeigt alle Optionen an, LISTEN-bezogene Optionen werden standardmäßig nicht angezeigt
-t (tcp) zeigt nur TCP-bezogene Optionen an
- u (udp) nur UDP-bezogene Optionen anzeigen
-n verweigert die Anzeige von Aliasnamen und konvertiert alle Zahlen, die angezeigt werden können, in Zahlen.
-l listet nur den Dienststatus in Listen (Listening) auf
-p zeigt den Namen des Programms an, das die entsprechende Verbindung hergestellt hat
-r zeigt die Routing-Informationen und die Routing-Tabelle an
- e zeigt die Erweiterungsinformationen wie UID usw. an.
-s Statistiken gemäß jedem Protokoll
-c Führen Sie den Befehl „netstat“ in regelmäßigen Abständen aus.
Tipp: Der Status von LISTEN und LISTENING kann nur mit -a oder -l eingesehen werden
Praktische Befehlsbeispiele
1. Alle Ports auflisten (einschließlich hörender und nicht hörender)
Alle Ports auflisten netstat -a
# netstat -a | more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:30037 *:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0 unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
Alle TCP-Ports auflisten netstat -at
# netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:30037 *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN
Alle UDP-Ports auflisten netstat -au
# netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:bootpc *:* udp 0 0 *:49119 *:* udp 0 0 *:mdns *:*
2. Alle Sockets im Überwachungsstatus auflisten
Nur den Überwachungsport netstat -l anzeigen
# netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:ipp *:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN udp 0 0 *:49119 *:*
Nur Alle lauschenden TCP-Ports auflisten netstat -lt
# netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:30037 *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN
Nur alle lauschenden UDP-Ports auflisten netstat -lu
# netstat -lu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:49119 *:* udp 0 0 *:mdns *:*
Nur alle lauschenden UNIX-Ports auflisten netstat -lx
# netstat -lx Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp
3. Statistiken für jedes Protokoll anzeigen
Statistiken für alle Ports anzeigen netstat -s
# netstat -s Ip: total packets received with invalid addresses forwarded incoming packets discarded incoming packets delivered requests sent out Icmp: ICMP messages received input ICMP message failed. Tcp: active connections openings failed connection attempts connection resets received Udp: packets received packets to unknown port received. .....
Statistiken für TCP- oder UDP-Ports anzeigen netstat -st oder -su
# netstat -st # netstat -su
4. PID und Prozessnamen in der Netstat-Ausgabe anzeigen netstat -p
netstat -p kann mit anderen Schaltern verwendet werden. Sie können „PID /Prozessname“ zur Netstat-Ausgabe hinzufügen, damit Sie können beim Debuggen leicht das Programm finden, das auf einem bestimmten Port ausgeführt wird.
# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
5. Host, Port und Benutzername (Host, Port oder Benutzer) nicht in der Netstat-Ausgabe anzeigen
Wenn Sie nicht möchten, dass Host, Port und Benutzername angezeigt werden , verwenden Sie netstat -n. Anstelle dieser Namen werden Zahlen verwendet.
kann auch die Ausgabe beschleunigen, da keine Vergleichsabfragen durchgeführt werden müssen.
# netstat -an
Wenn Sie einfach nicht möchten, dass einer dieser drei Namen angezeigt wird, verwenden Sie den folgenden Befehl
# netsat -a --numeric-ports # netsat -a --numeric-hosts # netsat -a --numeric-users
6. 持续输出 netstat 信息
netstat 将每隔一秒输出网络信息。
# netstat -c Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING ^C
7. 显示系统不支持的地址族 (Address Families)
netstat --verbose
在输出的末尾,会有如下的信息
netstat: no support for `AF IPX' on this system. netstat: no support for `AF AX25' on this system. netstat: no support for `AF X25' on this system. netstat: no support for `AF NETROM' on this system.
8. 显示核心路由信息 netstat -r
# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2 link-local * 255.255.0.0 U 0 0 0 eth2 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
9. 找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
# netstat -ap | grep ssh tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT - tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -
找出运行在指定端口的进程
# netstat -an | grep ':80'
10. 显示网络接口列表
# 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 0 0 0 0 0 0 0 0 BMU eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU lo 16436 0 4 0 0 0 4 0 0 0 LRU
显示详细信息,像是 ifconfig 使用 netstat -ie:
# netstat -ie Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Memory:f6ae0000-f6b00000
11. IP和TCP分析
查看连接某服务端口最多的的IP地址
wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20 221.136.168.36 154.74.45.242 78.173.31.236 62.183.207.98 192.168.1.14 182.48.111.215 124.193.219.34 119.145.41.2 114.255.41.30 75.102.11.99
TCP各种状态列表
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}' established) Foreign LISTEN TIME_WAIT ESTABLISHED TIME_WAIT SYN_SENT
先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c ESTABLISHED FIN_WAIT1 Foreign LAST_ACK LISTEN SYN_SENT TIME_WAIT established)
最后的命令如下:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
分析access.log获得访问前10位的ip地址
awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10