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


Ngrep ( 네트워크 grep )은 간단하지만 강력한 네트워크 패킷 분석기입니다. 네트워크 계층에 적용되는 grep-like 도구입니다. 네트워크 인터페이스를 통과하는 트래픽을 일치시킵니다. 패킷의 데이터 페이로드 (전송 된 데이터의 실제 정보 또는 메시지이지만 자동 생성 메타 데이터는 아님)와 일치하는 확장 된 정규 또는 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 protected]                                                                       

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 protected]

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. ""오류 "라는 단어가 나오는 네트워크 기반 syslog 트래픽을 모니터링하려면 다음 명령을 사용하십시오.

 
$ sudo ngrep -d any 'error' port 514

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

$ 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 byline 모드를 적용 할 때 어떤 일이 일어나는지 살펴 보겠습니다.

$ 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 ( 네트워크 grep )은 동일한 방식으로 BPF 필터 로직을 이해하는 네트워크 패킷 분석기입니다. 의견 섹션에서 ngrep 에 대한 귀하의 의견을 알고 싶습니다.