linux - netstat
netstat는 시스템의 네트워크 연결 상태(tcp, udp, 소켓연결)을 보여주는 유틸리티입니다.
사용 방법은 netstat [options] 으로 사용하면 됩니다.
* 옵션
옵션 |
설명 |
-a |
모든 소켓을 보기. 이 옵션을 안 넣으면 상태가 Established 상태인 것만 나온다. 동일 옵션은 --all |
-c |
현재 실행 명령을 매 초마다 실행. 동일 옵션은 --continuous => netstat -anc (해당 명령을 매 초마다 실행.) => netstat 10 (-c 옵션이 안 들어가도 해당 숫자만큼 시간이 지난후에 명령어 실행.) |
-e |
확장 정보 추가. User 부분과 Inode 열이 추가된다. 동일 옵션은 --extend |
-g |
멀티캐스트에 대한 그룹별 정보를 보여줌 (IPv4/IPv6). 동일 옵션은 --groups |
-i |
인터페이스별 통계값. -I=(인터페이스명) / --interface=(인터페이스명) 을 하면 해당 인터페이스값만 보기도 가능. |
-l |
대기중인 소켓 리스트만 보여준다. 동일 옵션은 --listening |
-n |
도메인 주소를 읽어들이지 않고 숫자로 출력한다. --numeric-hosts --numeric-ports --numeric-users 명령어가 합쳐진 옵션. 동일 옵션은 --numeric --numeric-hosts : 호스트 부분을 IP로 출력. --numeric-ports : 포트 부분을 숫자로 출력. --numeric-users : 유저 부분을 숫자로 출력(UID). |
-o |
연결 대기 시간 표기. 동일 옵션은 --timers |
-p |
PID(프로세서 ID) 와 사용중인 프로그램명이 표시된다. 동일 옵션은 --program |
-r | 라우팅 테이블 보기. 'route' 명령어와 동일. 동일 옵션은 --route |
-s | 프로토콜 요약 정보. 동일 옵션은 --statistics |
-t | TCP 프로토콜 보기. 연결된 것만 나옴. 동일 옵션은 --tcp |
-u | UDP 프로토콜 보기. 동일 옵션은 --udp |
-v | 버전 보기. |
-w | RAW 프로토콜 보기. 동일 옵션은 --raw |
-A | 프로토콜별로 보기. 종류는 inet, unix, ipx, ax25, netrom, ddp 가 있음. 동일 옵션은 --protocol => netstat -A inet (TCP 프로토콜 연결 상태만 보기) => netstat --protocol=inet (위의 명령어와 동일) |
-M | 마스커레이딩 정보 표시. 동일 옵션은 --masquerade |
* netstat 상태값
정보 |
설명 |
Proto |
프로토콜 종류. TCP / UDP / RAW 가 있음. |
Recv-Q |
해당 프로그램이 현재 받는 바이트 표기. |
Send-Q |
해당 프로그램이 현재 보내는 바이트 표기. |
Local Address |
출발지 주소 및 포트. 자신의 주소 및 포트. |
Foreign Address |
목적지 주소 및 포트. |
State |
포트의 상태 => CLOSED : 연결이 완전히 종료된 상태 => CLOSED_WAIT : TCP 연결이 상위 응용프로그램 레벨로부터 연결 종료를 기다리는 상태 => CLOSING : 흔하지 않으나 주로 확인 메세지가 전송 도중 유실된 상태 => ESTABLISHED : 연결이 완료된 상태. => FIN_WAIT1 : 클라이언트가 서버에게 연결을 끊고자 요청하는 상태(FIN을 보낸 상태) => FIN_WAIT2 : 서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태(서버가 클라이언트로 부터 최초로 FIN을 받은 후, 클라이언트에게 ACK을 주었을때) => LAST_ACK : 호스트가 원격지 호스트의 연결 종료 요구 승인을 기다리는 상태 => LISTEN : 대기중인 포트. 포트가 열려 있고 클리이언트의 요청을 기다리는 상태.(대기중 상태) => SYN_RECV : 연결 요청을 받은 후에 확인 값을 기다리는 상태. => SYN_SENT : 클라이언트가 서버에게 연결을 요청한 상태 => SYN_RECEIVED : 서버가 클라이언트로부터 접속 요구를 받아 클라이언트에게 응담을 하였지만, 아직 클라이언트에게 확인 메세지를 받지 못한 상태 => TIME_WAIT : 연결은 종료되었지만 종료된 후 기다리는 상태. 약 1분 정도이며 -o 옵션으로 확인 가능. 시간이 다 지나면 사라짐. => UNKNOWN : 소켓의 상태를 알 수 없음. |
TCP 플래그
플래그 |
설명 |
SYN |
Synchronization. 세션을 설정하는 데 사용되며 초기에 시퀀스 번호를 임의로 생성하여 보냄. 100%는 아니지만 대부분 클라이언트측에서 보내는 플래그 |
ACK |
Acknowledgement. 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보냄. ACK의 번호와 응답을 통해 보낸 패켓에 대한 손실을 판단하여 재전송 하거나 다음 패킷을 전송 |
FIN |
Finish. 세션을 종료시키는데 사용되며, 보낸 사림이 더 이상 보낼 데이터가 없음을 보여줌. |
RST |
Reset. 재설정을 하는 과정이며, 양방향에서 동시에 일어나는 중단 작업. 비정상적인 세션 연결 끊기에 해당 |
PSH |
Push. 대화형 트래픽에 사용되며, 버퍼가 채워지기를 기다리지 않고 데이터를 전달. 데이터는 버퍼링 없이 바로 위 Layer가 아닌 7 Layer의 응용프로그램으로 바로 전달 |
URG | Urgent. Urgent point가 유효한 것인지를 나타냄. Urgent point란 전송하는 데이터 중에서 긴급히 전달해야 하는 내용이 있을 경우 사용 |
기본 사용법
netstat -t 현재 접속중의 포트들의 상태 내용 확인
netstat -nap (열려 있는 모든 포트)
netstat -l 또는 netstat -nap | grep LISTEN (LISTEN 되는 모든 포트)
netstat -nap | grep ESTABLISHED | wc -l ( 모든 서비스 동시 접속자 수)
netstat -nap | grep :80 | grep ESTABLISHED | wc -l ( 웹 동시 접속자 수)
netstat -natc (열려있는 모든 TCP 포트를 일정시간마다 반복 출력한다)
* 예제.
1. 인터넷 연결 상태 보기.
[root@navi-linux ~]# netstat -A inet
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 navi-linux:35212 123.123.123.123:http ESTABLISHED
tcp 0 0 navi-linux:56976 61-111-58-50.kidc.net:http ESTABLISHED
tcp 0 314 navi-linux:telnet 231.231.231.231:netcheque ESTABLISHED
2. 통계값 보기 (프로토콜별).
[root@navi-linux ~]# netstat -s
Ip:
1141245 total packets received
355 with invalid addresses
0 forwarded
0 incoming packets discarded
1007688 incoming packets delivered
1050768 requests sent out
24 dropped because of missing route
Icmp:
24 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
destination unreachable: 22
echo requests: 1
echo replies: 1
141 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 135
echo request: 5
echo replies: 1
IcmpMsg:
InType0: 1
InType3: 22
InType8: 1
OutType0: 1
OutType3: 135
OutType8: 5
Tcp:
64013 active connections openings
16 passive connection openings
10 failed connection attempts
12 connection resets received
6 connections established
901778 segments received
941524 segments send out
2915 segments retransmited
0 bad segments received.
163 resets sent
Udp:
105794 packets received
4 packets to unknown port received.
0 packet receive errors
106216 packets sent
UdpLite:
TcpExt:
1 ICMP packets dropped because socket was locked
4112 TCP sockets finished time wait in fast timer
2 packets rejects in established connections because of timestamp
111607 delayed acks sent
12 delayed acks further delayed because of locked socket
Quick ack mode was activated 901 times
112 packets directly queued to recvmsg prequeue.
832 packets directly received from prequeue
464924 packets header predicted
48 packets header predicted and directly queued to user
125499 acknowledgments not containing data received
1063 predicted acknowledgments
6 congestion windows recovered after partial ack
0 TCP data loss events
2 timeouts after SACK recovery
393 other TCP timeouts
901 DSACKs sent for old packets
78 DSACKs received
6 connections reset due to unexpected data
10 connections reset due to early user close
356 connections aborted due to timeout
TCPDSACKIgnoredOld: 4
TCPDSACKIgnoredNoUndo: 6
TCPSackShiftFallback: 2
IpExt:
InMcastPkts: 7643
OutMcastPkts: 42
InBcastPkts: 124586
InOctets: 752411380
OutOctets: 172659736
InMcastOctets: 2477680
OutMcastOctets: 11674
InBcastOctets: 13876218
3. 통계값 보기 (인터페이스별).
[root@navi-linux ~]# 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 2168579 0 0 0 1053363 0 0 0
BMRU
eth1 1500 0 0 0 0 0 0 0 0 0
BMU
eth2 1500 0 0 0 0 0 0 0 0 0
BMU
lo 16436 0 20 0 0 0 20 0 0 0
LRU
4. 열려 있는 TCP 포트 보기.
[root@navi-linux ~]# netstat -lnt -A inet
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:34580 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
5. 연결된 TCP 포트 보기.
[root@navi-linux ~]# netstat -nt -A inet
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 111.111.111.111:33659 123.123.123.123:80 ESTABLISHED
tcp 0 0 111.111.111.111:56976 61.111.58.50:80 ESTABLISHED
tcp 0 134 112.112.112.112:23 121.121.121.121:4008 ESTABLISHED
6. 모든 열려있는 포트 보기.
[root@navi-linux ~]# netstat -ant -A inet
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:34580 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 111.111.111.111:33659 123.123.123.123:80 ESTABLISHED
tcp 0 0 111.111.111.111:56976 61.111.58.50:80 ESTABLISHED
tcp 0 134 112.112.112.112:23 121.121.121.121:4008 ESTABLISHED
7. 특정 포트나 호스트 모니터링 하기. (1초마다 80포트(인터넷)를 보기. ':80' 라는 텍스트가 들어간 라인을 보여준다. netstat -A inet -n | grep :80 을 1초마다 실행하는 결과이다.)
[root@navi-linux ~]# netstat -A inet -n -c | grep :80
tcp 0 0 111.111.111.111:56214 123.123.123.123:80 ESTABLISHED
tcp 0 0 111.111.111.111:56976 61.111.58.50:80 ESTABLISHED
8. 네트워크 자원을 사용중인 프로그램 종료 하기.
[root@navi-linux ~]# netstat -A inet -atp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address Stat
e PID/Program name
tcp 0 0 *:sunrpc *:* LIST
EN 856/rpcbind
tcp 0 0 *:34580 *:* LIST
EN 935/rpc.statd
tcp 0 0 *:ssh *:* LIST
EN 3681/sshd
tcp 0 0 navi-linux:47270 111.111.111.111:http ESTA
BLISHED 2263/firefox
tcp 0 0 navi-linux:41638 111.111.111.111:http ESTA
BLISHED 2263/firefox
tcp 0 0 navi-linux:telnet 222.222.222.222:netplan ESTA
BLISHED 943/in.telnetd: 172
tcp 0 0 navi-linux:46763 111.111.111.111:http ESTA
BLISHED 2263/firefox
tcp 0 0 navi-linux:47264 111.111.111.111:http TIME
_WAIT -
tcp 0 0 navi-linux:52984 123.123.123.123:ftp ESTA
BLISHED 886/filezilla
tcp 0 0 navi-linux:56581 61-111-58-50.kidc.net:http ESTA
BLISHED 1857/clock-applet
tcp 0 0 navi-linux:47273 111.111.111.111:http ESTA
BLISHED 2263/firefox
파일질라가 네트워크를 이용중이다. 프로그램을 종료시키자. -p 옵션이 들어가 있어야 한다. 맨 우측 886/filezilla 가 보인다. 왼쪽이 프로세서 ID(PID)이고 오른쪽이 실행이름이다.
[root@navi-linux ~]# kill 886
kill 명령어로 파일질라의 PID를 입력하여 프로그램을 종료시킨다.
[root@navi-linux ~]# netstat -A inet -atp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address Stat
e PID/Program name
tcp 0 0 *:sunrpc *:* LIST
EN 856/rpcbind
tcp 0 0 *:34580 *:* LIST
EN 935/rpc.statd
tcp 0 0 *:ssh *:* LIST
EN 3681/sshd
tcp 0 0 navi-linux:57621 111.111.111.111:http ESTA
BLISHED 2263/firefox
tcp 0 2 navi-linux:telnet 222.222.222.222:netplan ESTA
BLISHED 943/in.telnetd: 172
tcp 0 0 navi-linux:42278 111.111.111.111:http ESTA
BLISHED 2263/firefox
tcp 0 0 navi-linux:52984 123.123.123.123:ftp TIME
_WAIT -
tcp 0 0 navi-linux:56581 61-111-58-50.kidc.net:http ESTA
BLISHED 1857/clock-applet
재확인결과 없어져있다. TIME_WAIT 은 연결 종료 후 1분간 보인다.
현재 얼마나 많은 네트워크 접속이 있는지 확인하기
while [ true ]
do
net_status=`netstat -t | wc -l`
dt=`date "%Y-%m-%d %H:%M:%S"
echo "${dt} : ${net_status}"
done
결과2012-02-06 12:03:32 : 5402
2012-02-06 12:03:35 : 5412
============================================================================================================
윈도우용 netstat
시작 - 실행 - cmd 에서 커맨드 입력 상태로 먼저 들어간다.
Netstat활성 TCP 연결, 컴퓨터 수신 포트, 이더넷 통계, IP 라우팅 테이블, IPv4 통계(IP, ICMP, TCP, UDP 프로토콜에 대한 통계), IPv6 통계(IPv6, ICMPv6, IPv6를 통한 TCP, IPv6를 통한 UDP 통계)를 표시합니다. netstat를 매개 변수 없이 사용하면 활성 TCP 연결을 표시합니다.
구문
netstat [-a] [-e] [-n] [-o] [-p Protocol] [-r] [-s] [Interval]
매개 변수
-a
모든 활성 TCP 연결과 컴퓨터가 수신하는 TCP 및 UDP 포트를 표시합니다.
-e
바이트 수 및 보내고 받은 패킷과 같은 이더넷 통계를 표시합니다. 이 매개 변수는 -s와 함께 사용할 수 있습니다.
-n
활성 TCP 연결을 표시합니다. 주소 및 포트 번호는 숫자로 표시되고 이름을 확인하는 작업은 수행하지 않습니다.
- o
활성 TCP 연결을 표시하고 각 연결의 프로세스 ID(PID)를 포함합니다. Windows 작업 관리자의 프로세스 탭에서 PID 기반 응용 프로그램을 찾을 수 있습니다. 이 매개 변수는 -a, -n 및 -p와 함께 사용할 수 있습니다.
-p Protocol
Protocol을 사용하여 지정한 프로토콜의 연결을 표시합니다. 이 경우 Protocol은 tcp, udp, tcpv6, udpv6이 될 수 있습니다. 매개 변수를 -s와 함께 사용하면 프로토콜이 통계를 표시합니다. Protocol은 tcp, udp, icmp, ip, tcpv6, udpv6, icmpv6, ipv6가 될 수 있습니다.
-s
프로토콜에 의해 통계를 표시합니다. 기본적으로 TCP, UDP, ICMP 및 IP 프로토콜에 대한 통계를 표시합니다. IPv6 프로토콜을 설치하면 IPv6를 통한 TCP, IPv6를 통한 UDP, ICMPv6, IPv6 프로토콜에 대한 통계가 표시됩니다. -p 매개 변수는 프로토콜의 집합을 지정하는 데 사용할 수 있습니다.
-r
IP 라우팅 테이블의 내용을 표시합니다. 이것은 route print 명령과 같습니다.
Interval
Interval초마다 선택한 정보를 다시 표시합니다. 통계를 다시 표시하지 않으려면 Ctrl+C를 누릅니다. 이 매개 변수를 생략하면 netstat는 선택한 정보를 한 번만 표시합니다.
/?
명령 프롬프트에서 도움말을 표시합니다.
설명
이 명령과 함께 사용되는 매개 변수는 슬래시(/) 대신 하이픈(-)을 앞에 붙여야 합니다.
netstat는 다음과 같은 정보에 대한 통계를 제공합니다.
Proto
프로토콜(TCP 또는 UDP) 이름입니다.
로컬 주소
사용되고 있는 로컬 컴퓨터의 IP 주소와 포트 번호입니다. -n 매개 변수를 지정하지 않으면 IP 주소 및 포트 이름에 해당하는 로컬 컴퓨터의 이름이 표시됩니다. 포트를 아직 설정하지 않은 경우 포트 번호가 별표(*)로 나타납니다.
외부 주소
소켓이 연결된 원격 컴퓨터의 IP 주소와 포트 번호. -n 매개 변수를 지정하지 않으면 IP 주소 및 포트에 해당하는 이름이 표시됩니다. 포트를 아직 설정하지 않은 경우 포트 번호가 별표(*)로 나타납니다.
(state)
TCP 연결 상태를 표시합니다. 가능한 상태는 아래와 같습니다.
CLOSE_WAIT
CLOSED
ESTABLISHED
FIN_WAIT_1
FIN_WAIT_2
LAST_ACK
LISTEN
SYN_RECEIVED
SYN_SEND
TIMED_WAIT
TCP 연결 상태에 대한 자세한 내용은 RFC 793을 참조하십시오.
이 명령은 인터넷 프로토콜(TCP/IP) 프로토콜이 네트워크 연결의 네트워크 어댑터 속성의 구성 요소로 설치된 경우에만 사용할 수 있습니다.
예
이더넷 통계 및 모든 프로토콜 통계를 표시하려면 다음과 같이 입력합니다.
netstat -e -s
TCP 및 UDP 프로토콜의 통계를 표시하려면 다음과 같이 입력합니다.
netstat -s -p tcp udp
활성 TCP 연결 및 프로세스 ID를 5초마다 표시하려면 다음과 같이 입력합니다.
nbtstat -o 5
숫자 형식을 사용하여 활성 TCP 연결 및 프로세스 ID를 표시하려면 다음과 같이 입력합니다.
nbtstat -n -o
* 옵션
-a : 모든 연결 및 열린 포트를 확인한다. 리눅스의 -a 옵션과 동일.
-b : 현재 연결이 어떤 프로그램이 사용중인지 표시한다. PID(프로세서 ID)도 표시된다. 리눅스의 -p 옵션과 동일.
-e : 인터페이스의 통계치를 보여준다. 윈도우용은 기본적인것만 나오고 리눅스는 매우 자세히 나온다. 리눅스의 -i 옵션과 동일.
-n : 주소 및 포트를 숫자 형식으로 표시. 리눅스의 -n 옵션과 동일.
-o : 현재 연결이 어떤 프로그램이 사용중인지 PID(프로세서 ID)만 표시한다.
-r : 라우팅 테이블을 표시한다. route print와 동일하다. 리눅스의 -r 옵션과 동일.
-s : 프로토콜별 통계치를 보여준다. 리눅스의 -s 옵션과 동일.
-v : -b 옵션과 같이 사용시 아주 자세히 어떤 파일들이 네트워크 연결에 쓰는지 볼 수 있다. 정보 수집을 하여 시간이 오래 걸린다.
숫자 : 숫자값을 입력하면 해당 초만큼 간격으로 명령을 반복 실행한다. 정지는 Ctrl+C
[출처] 리눅스 명령어 - netstat (네트워크 연결 상태)|작성자 유미화
'개발 > Linux' 카테고리의 다른 글
[명령어] history 이전에 실행된 명령어 출력 (0) | 2011.05.25 |
---|---|
linux 명령어 - ln 심볼릭 링크 (0) | 2011.05.25 |
linux에 mysql 설치하기 (0) | 2010.01.05 |
vi 사용하기 (0) | 2009.09.10 |
[linux] 시스템(하드웨어) 사양 보기 (0) | 2009.02.18 |