리눅스 명령어 netstat

김규연·2023년 7월 21일
0

linux

목록 보기
9/11

⚙️ 리눅스 명령 구조

형식 -> 명령 [옵션][인자]

  • 명령 : 사용자가 컴퓨터 운영체제나 응용프로그램에게 어떤 서비스를 수행하도록 요구하는 것
  • 옵션 : 옵션을 사용하여 명령의 세부 기능을 선택할 수 있다. 리눅스의 기능을 풍부하게 하는 중요한 특징. "-"기호로 시작하며 영문 소문자나 대문자로 구성. 명령에 따라 어떤 옵션이 있고 그 기능이 무엇인지는 해당 명령의 사용법을 참조
  • 인자 : 명령으로 전달되는 값으로 주로 파일명이나 디렉터리명

🧐 네트워크 연결 확인 명령어 netstat

  • netstat [옵션][포트변호 or 서비스명]
    nestat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. 네트워크의 문제를 찾아내고 성능 측정으로 네트워크 상의 트래픽의 양을 결졍하기 위해 사용된다.

📌 netstat 명령어 옵션

옵션설명
-a현재 다른 서버 또는 PC와 연결, 리스닝 되어있는 모든 포트 번호를 확인
-n현재 다른 서버 또는 PC와 연결되어 있는 포트 번호를 확인
-lLISTEN 상태인 서비스 포트를 보여줌
-sIP, ICMP, UDP 등 프로토콜별로 통계를 보여줌
-uUDP 프로토콜을 보여줌
-tTCP 프로토콜을 보여줌
-c1초 단위로 결과값을 연속적으로 보여줌
-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 설치

리눅스 최조 설치시 netstat 명령어를 설치해 주어야한다. 아래 yum 명령어를 이용해 netstat를 설치해줄 수 있다.

yum install net-tools      //CentOS
apt install net-tools      //Ubuntu

📝 netstat -nap

열려있는 모든 포트를 표시해준다.

[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

📝 netstat -nap | grep 22

위의 명령어를 응용해서 특정 포트를 검색하는 방법이다. 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

📝 netstat -nap | grep LISTEN

상태값을 입력해서도 찾을 수 있다.

[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

📝 netstat -nat

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

📝 netstat -nau

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                 :::*

📝 netstat -rn

라우팅 정보 연결상태를 확인한다. -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)이란?
    라우팅은 한 네트워크에서 다른 네트워크로 패킷을 이동시키는 과정과 네트워크 안의 호스트에게 패킷들을 전달하는 과정을 말한다. 리눅스 시스템은 미리 설정도어 있는 라우팅 테이블이라는 지도를 보고 패킷을 어떤 네트워크 인터페이스를 거쳐 목적지로 보낼지 결정한다.

    • Destination : 목적지
    • Gateway : 외부 네트워크와 연결하기 위한 게이트웨이 주소
    • Genmask : 목적지 네트워크의 넷마스크 주소. "255.255.255.255"로 저장되어 있으면 목적지 호스트의 주소. "0.0.0.0"으로 지정되어 있으면 기본 게이트웨이 주소를 위미
    • Flags : 해당 경로에 대한 정보를 알려주는 기호
      - U(up) : 이 경로가 살아있는 상태
      - H(host) : 목적지가 호스트 주소라는 의미
      - G(gateway) : 개이트웨이를 향하는 경로를 의미
    • Iface : 패킷이 오가는 데 사용할 네트워크 인터페이스

📝 netstat -i

네트워크 인터페이스 정보를 출력한다.

[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는 송수신 중에 오류가 발생한 패킷의 개수를 의미한다.

📝 netstat -s

프로토콜별 네트워크 정보를 알려준다.

[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 프로토콜별 통계 정보를 출력해준다.

profile
오늘도 뚠뚠 개미 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

정말 유익한 글이었습니다.

답글 달기