형식 -> 명령 [옵션][인자]
- 명령 : 사용자가 컴퓨터 운영체제나 응용프로그램에게 어떤 서비스를 수행하도록 요구하는 것
- 옵션 : 옵션을 사용하여 명령의 세부 기능을 선택할 수 있다. 리눅스의 기능을 풍부하게 하는 중요한 특징. "-"기호로 시작하며 영문 소문자나 대문자로 구성. 명령에 따라 어떤 옵션이 있고 그 기능이 무엇인지는 해당 명령의 사용법을 참조
- 인자 : 명령으로 전달되는 값으로 주로 파일명이나 디렉터리명
- netstat [옵션][포트변호 or 서비스명]
nestat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. 네트워크의 문제를 찾아내고 성능 측정으로 네트워크 상의 트래픽의 양을 결졍하기 위해 사용된다.
옵션 | 설명 |
---|---|
-a | 현재 다른 서버 또는 PC와 연결, 리스닝 되어있는 모든 포트 번호를 확인 |
-n | 현재 다른 서버 또는 PC와 연결되어 있는 포트 번호를 확인 |
-l | LISTEN 상태인 서비스 포트를 보여줌 |
-s | IP, ICMP, UDP 등 프로토콜별로 통계를 보여줌 |
-u | UDP 프로토콜을 보여줌 |
-t | TCP 프로토콜을 보여줌 |
-c | 1초 단위로 결과값을 연속적으로 보여줌 |
-p [프로토콜] | 해당 포트를 사용하는 프로그램과 프로세스ID(PID)를 보여줌 |
-e | 랜카드에서 송수신한 패킷의 정보를 확인 |
-r | 라우팅 테이블 확인과 연결되어 있는 포트 번호 확인 |
상태 | 내용 |
---|---|
LISTEN | 연결 요구를 기다리는 상태. 포트가 열려있음 |
ESTABLISHED | 서로 연결되어 있는 상태 |
SVN_SENT | 클라이언트가 서버에 요구(SYN) 패킷을 보내고 연결을 요청한 상태 |
SVN_RECV | 서버가 클라이언트로부터 접속 요구(SYN)을 받아 클라이언트에게 응답(SYN/ACK)하였지만, 아직 클라이언트에게 확인 메시지(ACK)는 받지 못한 상태 |
FIN_WAIT1 | 클라이언트가 서버에게 연결을 끊고자 요청하는 상태 |
FIN_WAIT2 | 서버가 클라이언트로부터 연결 종료 응답을 기다리는 상태 (서버가 클라이언트로부터 최초로 FIN을 받은 후, 클라이언트에게 ACK를 주었을 때) |
TIME_WAIT | 이미 해당 사이트와 연결이 종료되었거나 다음 연결을 위해 기다리는 상태 |
CLOSE_WAIT | 원격의 연결을 요청을 받고 연결이 종료되길 기다리는 상태 |
LAST_ACK | 연결이 종료되었고 승인을 기다리는 상태 |
CLOSED | 완전히 연결이 종료된 상태 |
UNKNOWN | 소켓의 상테를 알 수 없음 |
리눅스 최조 설치시 netstat 명령어를 설치해 주어야한다. 아래 yum 명령어를 이용해 netstat를 설치해줄 수 있다.
yum install net-tools //CentOS
apt install net-tools //Ubuntu
열려있는 모든 포트를 표시해준다.
[root@localhost home]# netstat -nap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 989/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1276/master
tcp 0 64 192.168.0.158:22 192.168.0.123:62022 ESTABLISHED 1665/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 989/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1276/master
udp 0 0 0.0.0.0:68 0.0.0.0:* 1638/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 645/chronyd
udp6 0 0 ::1:323 :::* 645/chronyd
raw6 0 0 :::58 :::* 7 671/NetworkManager
위의 명령어를 응용해서 특정 포트를 검색하는 방법이다. grep 옵션에 포트 번호를 입력해서 찾을 수 있다.
[root@localhost home]# netstat -nap | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 989/sshd
tcp 0 64 192.168.0.158:22 192.168.0.123:62022 ESTABLISHED 1665/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 989/sshd
상태값을 입력해서도 찾을 수 있다.
[root@localhost home]# netstat -nap | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 989/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1276/master
tcp6 0 0 :::22 :::* LISTEN 989/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1276/master
TCP 프로토콜의 네트워크 연결상태를 확인한다.
[root@localhost home]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 64 192.168.0.158:22 192.168.0.123:62022 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
UDP 프로트콜의 네트워크 연결상태를 확인한다.
[root@localhost home]# netstat -nau
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
라우팅 정보 연결상태를 확인한다. -n 명령어는 이름을 확인하지 않겠다는 뜻으로, 기본 게이트웨이의 IP값이 "gateway"라는 이름으로 출력되지 않게 해준다. (-n명령어를 붙이지않으면 192.168.0.1이 "Gateway" 단어로 표시된다)
[root@localhost home]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.252.0 U 0 0 0 enp0s3
라우팅(Routing)이란?
라우팅은 한 네트워크에서 다른 네트워크로 패킷을 이동시키는 과정과 네트워크 안의 호스트에게 패킷들을 전달하는 과정을 말한다. 리눅스 시스템은 미리 설정도어 있는 라우팅 테이블이라는 지도를 보고 패킷을 어떤 네트워크 인터페이스를 거쳐 목적지로 보낼지 결정한다.
네트워크 인터페이스 정보를 출력한다.
[root@localhost home]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp0s3 1500 6898121 0 1 0 6269 0 0 0 BMRU
lo 65536 0 0 0 0 0 0 0 0 LRU
RX-OK, TX-OK는 정상적으로 주고받은 패킷의 개수, RX-ERR, RX-DRP, RX-OVR, TX-ERR, TX-DRP, TX-OVR는 송수신 중에 오류가 발생한 패킷의 개수를 의미한다.
프로토콜별 네트워크 정보를 알려준다.
[root@localhost home]# netstat -s
Ip:
1740810 total packets received
0 forwarded
0 incoming packets discarded
7412 incoming packets delivered
4827 requests sent out
32 dropped because of missing route
Icmp:
98 ICMP messages received
2 input ICMP message failed.
ICMP input histogram:
destination unreachable: 97
echo requests: 1
2 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 1
echo replies: 1
IcmpMsg:
InType3: 97
InType8: 1
OutType0: 1
OutType3: 1
Tcp:
3 active connections openings
2 passive connection openings
0 failed connection attempts
0 connection resets received
1 connections established
6156 segments received
3715 segments send out
0 segments retransmited
0 bad segments received.
0 resets sent
Udp:
1158 packets received
0 packets to unknown port received.
0 packet receive errors
1341 packets sent
0 receive buffer errors
0 send buffer errors
UdpLite:
TcpExt:
3 TCP sockets finished time wait in fast timer
15 delayed acks sent
1564 packet headers predicted
1121 acknowledgments not containing data payload received
2062 predicted acknowledgments
TCPRcvCoalesce: 40
TCPAutoCorking: 66
TCPOrigDataSent: 3559
TCPHystartTrainDetect: 1
TCPHystartTrainCwnd: 20
IpExt:
InNoRoutes: 2
InMcastPkts: 22423
InBcastPkts: 110767
InOctets: 138761315
OutOctets: 1041290
InMcastOctets: 710636
InBcastOctets: 12652092
InNoECTPkts: 1740975
IP 프로토콜, ICMP 프로토콜, TCP/UDP 프로토콜별 통계 정보를 출력해준다.
정말 유익한 글이었습니다.