ค้นหาเว็บไซต์

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 ที่มีประสิทธิภาพ ซึ่งมีประโยชน์สำหรับการทำความเข้าใจโฟลว์แพ็กเก็ตเครือข่ายและดำเนินการพิสูจน์หลักฐานเครือข่าย และอื่นๆ อีกมากมาย ลองใช้และแบ่งปันความคิดของคุณเกี่ยวกับเรื่องนี้กับเราในความคิดเห็น