ngrep - ตัววิเคราะห์แพ็คเก็ตเครือข่ายสำหรับ Linux
Ngrep (grep เครือข่าย) คือเครื่องมือวิเคราะห์แพ็กเก็ตเครือข่ายที่เรียบง่ายแต่ทรงพลัง มันเป็นเครื่องมือที่มีลักษณะคล้าย grep ที่ใช้กับเลเยอร์เครือข่าย โดยจะจับคู่การรับส่งข้อมูลที่ส่งผ่านอินเทอร์เฟซเครือข่าย ช่วยให้คุณสามารถระบุนิพจน์ทั่วไปหรือเลขฐานสิบหกแบบขยายเพื่อจับคู่กับเพย์โหลดข้อมูล (ข้อมูลหรือข้อความจริงในข้อมูลที่ส่ง แต่ไม่ใช่เมตาดาต้าที่สร้างขึ้นอัตโนมัติ) ของแพ็กเก็ต
เครื่องมือนี้ใช้งานได้กับโปรโตคอลหลายประเภท รวมถึง 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. หากต้องการตรวจสอบการรับส่งข้อมูล syslog บนเครือข่ายเพื่อหาคำว่า “ข้อผิดพลาด ” เกิดขึ้น ให้ใช้คำสั่งต่อไปนี้
sudo ngrep -d any 'error' port 514
ที่สำคัญ เครื่องมือนี้สามารถแปลงชื่อพอร์ตบริการที่จัดเก็บไว้ใน “/etc/services ” (บนระบบที่คล้ายกับ Unix เช่น Linux) ให้เป็นหมายเลขพอร์ต คำสั่งนี้เทียบเท่ากับคำสั่งข้างต้น
sudo ngrep -d any 'error' port syslog
6. คุณยังสามารถเรียกใช้ ngrep กับเซิร์ฟเวอร์ HTTP (พอร์ต 80) ซึ่งจะจับคู่คำขอทั้งหมดไปยังโฮสต์ปลายทางดังที่แสดง
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 (grep เครือข่าย) คือเครื่องมือวิเคราะห์แพ็กเก็ตเครือข่ายที่เข้าใจตรรกะตัวกรอง BPF ในรูปแบบ tcpdump เดียวกัน เราต้องการทราบความคิดเห็นของคุณเกี่ยวกับ ngrep ในส่วนความคิดเห็น