TCPflow - วิเคราะห์และดีบักการรับส่งข้อมูลเครือข่ายใน Linux
TCPflow เป็นเครื่องมือที่ใช้บรรทัดคำสั่งโอเพ่นซอร์สและทรงพลังฟรีสำหรับการวิเคราะห์การรับส่งข้อมูลเครือข่ายบนระบบที่คล้ายกับ Unix เช่น Linux โดยจะรวบรวมข้อมูลที่ได้รับหรือถ่ายโอนผ่านการเชื่อมต่อ TCP และจัดเก็บไว้ในไฟล์เพื่อการวิเคราะห์ในภายหลัง ในรูปแบบที่เป็นประโยชน์ซึ่งช่วยให้สามารถวิเคราะห์และแก้ไขโปรโตคอลได้
อ่านเพิ่มเติม: 16 เครื่องมือตรวจสอบแบนด์วิธที่ดีที่สุดในการวิเคราะห์การใช้งานเครือข่ายใน Linux
จริงๆ แล้วมันเป็นเครื่องมือที่มีลักษณะคล้าย tcpdump เนื่องจากมันประมวลผลแพ็กเก็ตจากสายหรือจากไฟล์ที่เก็บไว้ รองรับนิพจน์การกรองที่ทรงพลังแบบเดียวกับที่คู่กันสนับสนุน ข้อแตกต่างเพียงอย่างเดียวคือ tcpflow จะจัดแพ็กเก็ต TCP ทั้งหมดตามลำดับและประกอบแต่ละโฟลว์ในไฟล์แยกกัน (ไฟล์สำหรับโฟลว์แต่ละทิศทาง) เพื่อการวิเคราะห์ในภายหลัง
ชุดคุณลักษณะประกอบด้วยระบบปลั๊กอินขั้นสูงสำหรับการขยายขนาดการเชื่อมต่อ HTTP ที่ถูกบีบอัด เลิกทำการเข้ารหัส MIME หรือการเรียกใช้โปรแกรมของบริษัทอื่นเพื่อการประมวลผลภายหลัง และอื่นๆ อีกมากมาย
มีกรณีการใช้งานมากมายสำหรับ tcpflow ซึ่งรวมถึงเพื่อทำความเข้าใจกระแสแพ็กเก็ตเครือข่าย และยังรองรับการดำเนินการพิสูจน์หลักฐานเครือข่ายและเปิดเผยเนื้อหาของเซสชัน HTTP
วิธีการติดตั้ง TCPflow ในระบบ Linux
TCPflow มีอยู่ในพื้นที่เก็บข้อมูลอย่างเป็นทางการของการกระจาย GNU/Linux หลัก คุณสามารถติดตั้งได้โดยใช้ตัวจัดการแพ็คเกจตามที่แสดง
sudo apt install tcpflow #Debian/Ubuntu
sudo yum install tcpflow #CentOS/RHEL
sudo dnf install tcpflow #Fedora 22+
หลังจากติดตั้ง tcpflow คุณสามารถเรียกใช้งานด้วยสิทธิ์ผู้ใช้ระดับสูง ไม่เช่นนั้นให้ใช้ คำสั่ง sudo โปรดทราบว่าจะฟังบนอินเทอร์เฟซเครือข่ายที่ใช้งานอยู่ (เช่น enp0s3)
sudo tcpflow
tcpflow: listening on enp0s3
ตามค่าเริ่มต้น tcpflow จะจัดเก็บข้อมูลที่บันทึกไว้ทั้งหมดในไฟล์ที่มีชื่อในรูปแบบ (ซึ่งอาจแตกต่างออกไปหากคุณใช้ตัวเลือกบางอย่าง เช่น ประทับเวลา)
sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443
ตอนนี้เรามาทำรายการไดเร็กทอรีเพื่อดูว่ามีการบันทึก tcp flow ในไฟล์ใด ๆ หรือไม่
ls -1
total 20
-rw-r--r--. 1 root root 808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root root 59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920
ดังที่เราได้กล่าวไว้ก่อนหน้านี้ แต่ละโฟลว์ TCP จะถูกจัดเก็บไว้ในไฟล์ของตัวเอง จากผลลัพธ์ด้านบน คุณจะเห็นว่ามีไฟล์การถอดเสียงสามไฟล์ ซึ่งระบุ tcpflow ในสองทิศทางตรงกันข้าม โดยที่ IP ต้นทางในไฟล์แรกและ IP ปลายทางในไฟล์ที่สองและในทางกลับกัน
ไฟล์แรก 192.168.043.031.52920-216.058.210.034.00443 มีข้อมูลที่ถ่ายโอนจากโฮสต์ 192.168.043.031 (localhost ที่รัน tcpflow) ผ่านพอร์ต 52920 เพื่อโฮสต์ 216.058.210.034 (โฮสต์ระยะไกล) ผ่านพอร์ต 443
และไฟล์ที่สอง 216.058.210.034.00443-192.168.043.031.52920 มีข้อมูลที่ส่งจากโฮสต์ 216.058.210.034 (โฮสต์ระยะไกล) ผ่านพอร์ต 443 เพื่อโฮสต์ 192.168.043.031 (โลคัลโฮสต์ที่รัน tcpflow) ผ่านพอร์ต 52920
นอกจากนี้ยังมีรายงาน XML ที่สร้างขึ้น ซึ่งมีข้อมูลเกี่ยวกับโปรแกรม เช่น วิธีการคอมไพล์ และคอมพิวเตอร์ที่รันโปรแกรม และบันทึกของการเชื่อมต่อ TCP ทุกรายการ
ดังที่คุณอาจสังเกตเห็นว่า tcpflow จะจัดเก็บไฟล์การถอดเสียงไว้ในไดเร็กทอรีปัจจุบันตามค่าเริ่มต้น ตัวเลือก -o
สามารถช่วยคุณระบุไดเร็กทอรีเอาต์พุตที่จะเขียนไฟล์การถอดเสียง
sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files
total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root 45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root 68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root 573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root 38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml
คุณยังสามารถพิมพ์เนื้อหาของแพ็กเก็ตไปที่ stdout ตามที่ได้รับ โดยไม่ต้องจัดเก็บข้อมูลที่บันทึกไว้ในไฟล์ โดยใช้แฟล็ก -c
ดังต่อไปนี้
หากต้องการทดสอบอย่างมีประสิทธิภาพ ให้เปิดเทอร์มินัลตัวที่สองแล้วเรียกใช้ ping หรือท่องอินเทอร์เน็ต คุณควรจะสามารถดูรายละเอียดการ ping หรือรายละเอียดการสืบค้นของคุณที่ tcpflow จับได้
sudo tcpflow -c
คุณสามารถบันทึกการรับส่งข้อมูลทั้งหมดบนพอร์ตใดพอร์ตหนึ่งได้ เช่น พอร์ต 80 (HTTP) ในกรณีของการรับส่งข้อมูล HTTP คุณจะสามารถเห็นส่วนหัว HTTP ตามด้วยเนื้อหาทั้งหมดบน stdout หรือในไฟล์เดียวหากสวิตช์ -c
ถูกลบออก
sudo tcpflow port 80
หากต้องการจับแพ็กเก็ตจากอินเทอร์เฟซเครือข่ายเฉพาะ ให้ใช้แฟล็ก -i
เพื่อระบุชื่ออินเทอร์เฟซ
sudo tcpflow -i eth0 port 80
คุณยังสามารถระบุโฮสต์เป้าหมายได้ (ค่าที่ยอมรับได้แก่ ที่อยู่ IP ชื่อโฮสต์ หรือโดเมน) ดังที่แสดง
sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com
คุณสามารถเปิดใช้งานการประมวลผลทั้งหมดโดยใช้เครื่องสแกนทั้งหมดด้วยแฟล็ก -a
ซึ่งเทียบเท่ากับสวิตช์ -e
ทั้งหมด
sudo tcpflow -a
OR
sudo tcpflow -e all
สามารถเปิดใช้งานเครื่องสแกนเฉพาะได้ เครื่องสแกนที่มีอยู่ ได้แก่ md5, http, netviz, tcpdemux และ wifiviz (เรียกใช้ tcpflow -H เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับเครื่องสแกนแต่ละเครื่อง)
sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz
ตัวอย่างต่อไปนี้แสดงวิธีเปิดใช้งานสแกนเนอร์ทั้งหมดยกเว้น tcpdemux
sudo tcpflow -a -x tcpdemux
TCPflow มักจะพยายามทำให้อินเทอร์เฟซเครือข่ายเข้าสู่โหมดที่หลากหลายก่อนที่จะจับแพ็กเก็ต คุณสามารถป้องกันสิ่งนี้ได้โดยใช้แฟล็ก -p
ดังที่แสดง
sudo tcpflow -p -i eth0
หากต้องการอ่านแพ็กเก็ตจากไฟล์ tcpdump pcap ให้ใช้แฟล็ก -r
sudo tcpflow -f file.pcap
คุณสามารถเปิดใช้งานโหมดรายละเอียดได้โดยใช้ตัวเลือก -v
หรือ -d 10
sudo tcpflow -v
OR
sudo tcpflow -d 10
ข้อสำคัญ: ข้อจำกัดประการหนึ่งของ tcpflow คือ ในปัจจุบันไม่เข้าใจแฟรกเมนต์ IP ดังนั้นข้อมูลที่ส่งเป็นส่วนหนึ่งของการเชื่อมต่อ TCP ที่มีแฟรกเมนต์ IP จะไม่ถูกจับอย่างถูกต้อง
สำหรับข้อมูลเพิ่มเติมและตัวเลือกการใช้งาน โปรดดูหน้าคู่มือ tcpflow
man tcpflow
พื้นที่เก็บข้อมูล TCPflow Github: https://github.com/simsong/tcpflow
นั่นคือทั้งหมดที่สำหรับตอนนี้! TCPflow คือเครื่องบันทึกโฟลว์ TCP ที่มีประสิทธิภาพ ซึ่งมีประโยชน์สำหรับการทำความเข้าใจโฟลว์แพ็กเก็ตเครือข่ายและดำเนินการพิสูจน์หลักฐานเครือข่าย และอื่นๆ อีกมากมาย ลองใช้และแบ่งปันความคิดของคุณเกี่ยวกับเรื่องนี้กับเราในความคิดเห็น