웹사이트 검색

ngrep - Linux용 네트워크 패킷 분석기


Ngrep(network grep)은 간단하면서도 강력한 네트워크 패킷 분석기입니다. 이는 네트워크 계층에 적용되는 grep과 유사한 도구로, 네트워크 인터페이스를 통해 전달되는 트래픽과 일치합니다. 이를 통해 패킷의 데이터 페이로드(전송된 데이터의 실제 정보 또는 메시지이지만 자동 생성된 메타데이터는 아님)와 일치하도록 확장된 정규식 또는 16진수 표현식을 지정할 수 있습니다.

이 도구는 IPv4/6, TCP, UDP, ICMPv4/6, IGMP 및 여러 인터페이스의 Raw를 포함한 다양한 유형의 프로토콜과 함께 작동합니다. tcpdump 패킷 스니핑 도구와 동일한 방식으로 작동합니다.

ngrep 패키지는 표시된 대로 패키지 관리 도구를 사용하여 주류 Linux 배포판의 기본 시스템 저장소에서 설치할 수 있습니다.

sudo apt install ngrep
sudo yum install ngrep
sudo dnf install ngrep

ngrep을 설치한 후 다음 예를 사용하여 Linux 네트워크의 트래픽 분석을 시작할 수 있습니다.

1. 다음 명령은 기본 작업 인터페이스에서 모든 ping 요청을 일치시키는 데 도움이 됩니다. 다른 터미널을 열고 다른 원격 시스템에 ping을 시도해야 합니다. -q 플래그는 ngrep에게 패킷 헤더와 페이로드 이외의 정보를 출력하지 않고 조용히 작동하도록 지시합니다.

sudo ngrep -q '.' 'icmp'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( icmp ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

I 192.168.0.104 -> 192.168.0.103 8:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.104 -> 192.168.0.103 8:0
  ]....oG[............................ !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]....oG[............................ !"#$%&'()*+,-./01234567  

Ctrl + C를 눌러 종료할 수 있습니다.

2. 특정 대상 사이트(예: 'google.com')로 이동하는 트래픽만 일치시키려면 다음 명령을 실행한 후 브라우저에서 액세스해 보세요.

sudo ngrep -q '.' 'host google.com'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>[email ..                                                                       

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;[email 

3. 웹을 서핑하는 경우 다음 명령을 실행하여 브라우저에서 요청하는 파일을 모니터링하세요.

sudo ngrep -q '^GET .* HTTP/1.[01]'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ((ip || ip6) || (vlan && (ip || ip6)))
match: ^GET .* HTTP/1.[01]

T 192.168.0.104:43040 -> 172.217.160.174:80 [AP]
  GET / HTTP/1.1..Host: google.com..User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; 
  GNU C 4.8.5; text)..Accept: */*..Accept-Language: en,*;q=0.1..Accept-
  Encoding: gzip, deflate, bzip2..Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,
  ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,ISO-8859-9,ISO-8859-10,I
  SO-8859-13,ISO-8859-14,ISO-8859-15,ISO-8859-16,windows-1250,windows-1251,windows-1252,windows-1256,
  windows-1257,cp437,cp737,cp850,cp852,cp866,x-cp866-u,x-mac,x-mac-ce,x-
  kam-cs,koi8-r,koi8-u,koi8-ru,TCVN-5712,VISCII,utf-8..Connection: keep-alive.... 

4. 소스 또는 대상 포트 25(SMTP)를 통과하는 모든 활동을 보려면 다음 명령을 실행합니다.

sudo ngrep port 25

5. “error ”라는 단어가 발생하는지 네트워크 기반 syslog 트래픽을 모니터링하려면 다음 명령을 사용하십시오.

 
sudo ngrep -d any 'error' port 514

중요한 점은 이 도구가 “/etc/services ”(Linux와 같은 Unix 계열 시스템)에 저장된 서비스 포트 이름을 포트 번호로 변환할 수 있다는 것입니다. 이 명령은 위의 명령과 동일합니다.

sudo ngrep -d any 'error' port syslog

6. HTTP 서버(포트 80)에 대해 ngrep을 실행할 수도 있으며, 표시된 대로 모든 요청을 대상 호스트에 일치시킵니다.

sudo ngrep port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42167 -> 64.90.164.74:80 [AP]
  GET / HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i
  686) Opera 7.21  [en]..Host: www.darkridge.com..Accept: text/html, applicat
  ion/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gi
  f, image/x-xbitmap, */*;q=0.1..Accept-Charset: iso-8859-1, utf-8, utf-16, *
  ;q=0.1..Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0..Cookie: SQ
  MSESSID=5272f9ae21c07eca4dfd75f9a3cda22e..Cookie2: $Version=1..Connection:
  Keep-Alive, TE..TE: deflate, gzip, chunked, identity, trailers....
##

위 출력에서 볼 수 있듯이 모든 HTTP 헤더 전송은 잔혹한 세부 사항으로 표시됩니다. 하지만 파싱하기 어렵기 때문에 -W 바이라인 모드를 적용하면 어떤 일이 발생하는지 살펴보겠습니다.

sudo ngrep -W byline port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42177 -> 64.90.164.74:80 [AP]
GET / HTTP/1.1.
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ...
Host: www.darkridge.com.
Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ...
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1.
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0.
Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e.
Cookie2: $Version=1.
Cache-Control: no-cache.
Connection: Keep-Alive, TE.
TE: deflate, gzip, chunked, identity, trailers.

7. 패킷이 일치할 때마다 YYYY/MM/DD HH:MM:SS.UUUUUU 형식으로 타임스탬프를 인쇄하려면, -t 플래그를 사용하세요.

sudo ngrep -t -W byline port 80

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6)))
####
T 2018/07/12 16:33:19.348084 192.168.0.104:43048 -> 172.217.160.174:80 [AP]
GET / HTTP/1.1.
Host: google.com.
User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; GNU C 4.8.5; text).
Accept: */*.
Accept-Language: en,*;q=0.1.
Accept-Encoding: gzip, deflate, bzip2.
Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,ISO-8859-5,utf-8.
Connection: keep-alive.

8. 모니터링 중인 인터페이스를 무차별 모드(전체적으로 도착하는 각 네트워크 패킷을 가로채서 읽는 모드)로 전환하지 않으려면 -p 플래그를 추가하세요.

sudo ngrep -p -W byline port 80

9. 또 다른 중요한 옵션은 원시 또는 알 수 없는 프로토콜을 관찰하는 경우에 유용한 -N입니다. 이는 ngrep에게 단일 문자 식별자와 함께 하위 프로토콜 번호를 표시하도록 지시합니다.

sudo ngrep -N -W byline

자세한 내용은 ngrep 매뉴얼 페이지를 참조하세요.

man ngrep

ngrep Github 저장소: https://github.com/jpr5/ngrep

그게 다야! Ngrep(network grep)은 tcpdump와 동일한 방식으로 BPF 필터 논리를 이해하는 네트워크 패킷 분석기입니다. 댓글 섹션에서 ngrep에 대한 귀하의 생각을 알고 싶습니다.