때때로 컴퓨터가 잘못된 데이터나 오작동을 일으키는 데이터그램을 수신하더라도 놀라지 마십시오. TCP/IP는 이러한 유형의 오류를 허용하고 자동으로 데이터그램을 다시 보낼 수 있습니다. 그러나 오류 조건의 누적 수가 수신된 IP 데이터그램의 큰 부분을 차지하거나 그 수가 급격히 증가하는 경우 netstat를 사용하여 이러한 조건이 발생하는 이유를 알아내야 합니다.
1. 명령 형식:
netstat [-acCeFghilMnNoprstuvVwx][-A<네트워크 유형>][--ip]
2. 명령 기능:
netstat는 IP, TCP, UDP 및 ICMP 프로토콜과 관련된 통계 데이터를 표시하는 데 사용됩니다. 일반적으로 머신의 각 포트의 네트워크 연결을 확인하는 데 사용됩니다.
3. 명령 매개변수:
-a 또는 –all은 연결된 모든 소켓을 표시합니다.
-A
-c 또는 –continuous는 네트워크 상태를 연속적으로 나열합니다.
-C 또는 –cache는 라우터 구성의 캐시 정보를 표시합니다.
-e 또는 –extend는 네트워크에 대한 기타 관련 정보를 표시합니다.
-F 또는 –fib는 FIB를 표시합니다.
-g 또는 –groups는 멀티캐스트 기능 그룹의 구성원 목록을 표시합니다.
-h 또는 –help 온라인 도움말입니다.
-i 또는 –interfaces는 네트워크 인터페이스 정보 형식을 표시합니다.
-l 또는 –listening은 모니터링되는 서버의 소켓을 표시합니다.
-M 또는 –masquerade는 가장된 네트워크 연결을 표시합니다.
-n 또는 –numeric은 도메인 네임 서버를 거치지 않고 IP 주소를 직접 사용합니다.
-N 또는 –netlink 또는 –symbolic은 네트워크 하드웨어 주변 장치의 심볼릭 링크 이름을 표시합니다.
-o 또는 –timers는 타이머를 표시합니다.
-p 또는 –programs는 소켓을 사용하고 있는 프로그램 식별 코드와 프로그램 이름을 표시합니다.
-r 또는 –route는 라우팅 테이블을 표시합니다.
-s 또는 –statistice는 네트워크 작업 정보 통계 테이블을 표시합니다.
-t 또는 –tcp는 TCP 전송 프로토콜의 연결 상태를 표시합니다.
-u 또는 –udp는 UDP 전송 프로토콜의 연결 상태를 표시합니다.
-v 또는 –verbose는 명령 실행 프로세스를 표시합니다.
-V 또는 –version은 버전 정보를 표시합니다.
-w 또는 –raw는 RAW 전송 프로토콜의 연결 상태를 표시합니다.
-x 또는 –unix 이 매개변수의 효과는 "-A unix" 매개변수를 지정하는 것과 동일합니다.
–ip 또는 –inet 이 매개변수의 효과는 "-A inet" 매개변수를 지정하는 것과 동일합니다.
4. 사용 예:
예 1: 매개변수 없이
명령 사용: netstat
출력:
[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 ~]#
설명:
From 전반적으로 netstat의 출력 결과는 두 부분으로 나눌 수 있습니다.
하나는 활성 TCP 연결이라고 하는 활성 인터넷 연결입니다. 여기서 "Recv-Q" 및 "Send-Q"는 수신 대기열과 송신 대기열을 나타냅니다. . 이 숫자는 일반적으로 0이어야 합니다. 그렇지 않으면 패키지가 대기열에 쌓이고 있다는 의미입니다. 이 상황은 매우 드문 경우에만 볼 수 있습니다.
다른 하나는 액티브 유닉스 도메인 소켓이라고 불리는 액티브 유닉스 도메인 소켓입니다(네트워크 소켓과 동일하지만 로컬 통신에만 사용할 수 있으며 성능을 두 배로 높일 수 있습니다).
Proto는 연결에 사용된 프로토콜을 표시하고, RefCnt는 이 소켓에 연결된 프로세스 번호를 나타내며, Types는 소켓 유형을 표시하고, State는 소켓의 현재 상태를 표시하며, Path는 다른 프로세스의 사용을 나타냅니다. 소켓에 연결됩니다.
소켓 유형:
-t: TCP
-u: UDP
-raw: RAW 유형
--unix: UNIX 도메인 유형
--ax25 : AX25 유형
--ipx : ipx 유형
--netrom : netrom 유형
상태 설명:
LISTEN: 원격 TCP 포트에서 연결 요청을 수신합니다.
SYN-SENT: 연결 요청을 보낸 후 일치하는 연결 요청을 기다립니다. (이러한 상태 패킷이 많은 경우 )
SYN-RECEIVED : 연결 요청을 받고 보낸 후 상대방의 연결 요청 확인을 기다립니다. (이 상태가 많을 경우 침수될 것으로 추정됩니다.)
ESTABLISHED: 대표 개방형 연결
FIN-WAIT-1: 원격 TCP의 연결 중단 요청을 기다리는 중 또는 이전 연결 중단 요청 승인
FIN -WAIT-2: 원격 TCP의 연결 중단 요청을 기다리는 중
CLOSE-WAIT: 로컬 사용자의 연결 중단 요청을 기다리는 중
CLOSING: 원격 TCP의 연결 중단 확인을 기다리는 중 연결 중단
LAST-ACK: 원래 요청을 기다리는 중 원격 TCP에 대한 연결 중단 요청 확인(좋지 않음, 이 항목이 나타나면 공격을 받는지 확인)
TIME-WAIT: 원격 TCP가 연결 중단 요청 확인을 수신할 수 있을 만큼 충분한 시간을 기다립니다.
CLOSED: 연결 상태 없음
예 2: 모두 나열 ports
명령: netstat -a
출력:
[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 ~]#
설명:
설정된 연결을 포함하여 유효한 모든 연결 정보 목록을 표시합니다( ESTABLISHED) 및 연결을 수신하는 연결(LISTENING)입니다.
예 3: 현재 UDP 연결 상태 표시
명령: netstat -nu
출력:
[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 ~]#
예 4: UDP 포트 표시 number 사용법
명령: netstat -apu
출력:
[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 ~]#
예 5: 네트워크 카드 목록 표시
명령: netstat -i
출력:
[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 ~]#
예 6: 멀티캐스트 그룹 관계 표시
命令: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命令就可以找到具体的应用程序了。