it-swarm.asia

ما هي أسهل طريقة لاستنشاق TCP بيانات حركة المرور على نظام Linux؟

أريد طريقة بسيطة لإظهار جميع TCP البيانات (وليس TCP الرؤوس أو أي شيء آخر) يمر عبر أي واجهة في صندوق Linux الخاص بي.

على سبيل المثال ، أريد أمرًا سحريًا إذا فعلت:

magic_commmand_I_want port=1234

ثم إذا كان هناك خادم يستمع على المنفذ 1234 على جهازي ، وفعل شخص ما:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a Host/port

ثم يطبع الأمر السحري فقط:

hello

لقد جربت "tcpdump" ، و "Ethereal" ، و "tethereal" ، و "tshark" ، وغيرها ، لكن ليس من الواضح كيف تجعلهم:

  • لا تظهر عناوين IP أو بيانات التعريف الأخرى
  • فقط عرض "البيانات" التي يتم إرسالها ، وليس الحزم الفردية ورؤوسها
  • طباعة البيانات كما هي ، وليس بالسداسية ، وليس باستخدام علامات إزاحة الحزمة
  • sniff all حركة مرور الشبكة (سواء كانت على eth0 أو eth1 أو لو ، الخ ...)

نعم ، ربما يمكنك تجميع مجموعة من أوامر unix معيّنة للقيام بذلك ، لكن هذا ليس من السهل تذكره في المرة القادمة :)

إذا كان لديك مثال بسيط على سطر أوامر دقيق يقوم بذلك ، فهذا ما أود.

77
Dustin Boswell

تحديث:

كما أشار Michal في التعليقات: من الإصدار tcpflow 1.3 ، يتم استخدام الخيار -e لتحديد اسم الماسح الضوئي. لذلك تتم طباعة الخطأ "اسم الماسح الضوئي غير صالح '8983'". الأمر الصحيح هو

Sudo tcpflow -i any -C -J port 1234

(تم تغيير -J أيضًا إلى -g في الإصدار الأخير)


شكرًا على yves لتوجيهك إلى " tcpflow ". إليك سطر الأوامر:

tcpflow -i any -C -e port 1234  # as root, or with Sudo

هذا يفعل كل ما أريد

  • يعرض البيانات بايت مقابل البايت كما يأتي في
  • لا يعرض أي بيانات وصفية أخرى
  • يستمع إلى جميع الواجهات (بحيث يلتقط البيانات الواردة من داخل الجهاز وخارجه)

يخبرك "-C" بالتخلص من وحدة التحكم بدلاً من الملف. يعمل "-e" على تمكين الألوان بحيث يكون العميل> الخادم والخادم> العميل متميزًا بصريًا.

لقد قمت بتثبيت tcpflow بمجرد القيام به

Sudo apt-get install tcpflow
104
Dustin Boswell

socat هي الأداة التي تطلبها. يمكن أن يكون بمثابة وكيل:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

ثم يجب أن يقوم التطبيق الخاص بك بتوصيل المنفذ 4444 بدلاً من الاتصال مباشرة بـ 1234

الخيار -v هو لـ socat لطباعة كل ما يتلقاه على الخطأ القياسي (stderr).

تحديث:

إذا لم يكن socat متاحًا على جهازك ، فلا يزال بإمكانك محاكاته بهذه الطريقة باستخدام netcat:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

المحاذير: هذا الخيار أحادي الاتجاه. سيقوم مثيل netcat الثاني بطباعة أي استجابة من الخادم الخاص بك إلى الإخراج القياسي. لا يزال بإمكانك فعل ذلك:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
29
yves Baumes

حاول Wireshark . إنه محلل بروتوكول ممتاز يستهدف كلا من Linux و Windows.

20
Kevin Boyd

tcpflow هو ما تريد. مقتطف من صفحة الرجل:

وصف
tcpflow هو برنامج يلتقط البيانات المرسلة كجزء من TCP الاتصالات (التدفقات) ، ويخزن البيانات بطريقة ملائمة لتحليل البروتوكول يعرض برنامج مثل tcpdump (4) ملخصًا للحزم التي يتم رؤيتها على السلك ، ولكن عادة لا يخزن البيانات التي يتم إرسالها بالفعل. في المقابل ، يعيد tcpflow إعادة بناء تدفقات البيانات الفعلية ويخزن كل تدفق في ملف منفصل لتحليله لاحقًا. يفهم tcpflow TCP أرقام التسلسل وسيعيد بناء تدفقات البيانات بشكل صحيح بغض النظر عن عمليات إعادة الإرسال أو التسليم خارج الترتيب.

يقوم tcpflow بتخزين جميع البيانات التي تم التقاطها في ملفات لها أسماء النموذج

192.168.101.102.02345-010.011.012.013.45103

حيث تكون محتويات الملف أعلاه بيانات مرسلة من Host 192.168.101.102 port 2345 ، إلى Host 10.11.12.13 port 45103.

قم بإعداد اتصال من تطبيق التطبيق الخاص بك إلى الخادم الخاص بك. عندما يكون الاتصال قيد التشغيل ، لا يزال tcpflow قادرًا على التقاط البيانات منه على سبيل المثال:

$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

سيتم تخزين كل البيانات في ملف اسمه 127.000.000.001.48842-127.000.000.001.05555.

لا يزال بإمكانك إعادة توجيه هذا على الإخراج القياسي مع الخيار -CS. اقرأ الصفحة اليدوية لتلعب مع تعبير لضبط الحزم التي تريد التقاطها من tcpflow.

13
yves Baumes

ngrep جميل جدا لهذا الغرض. يتطلب الأمر سلسلة BPF وسلسلة اختيارية للبحث عنها داخل الحزم ، ثم تفريغ محتويات الحزمة على الشاشة بتنسيق مفيد للغاية. بشكل اختياري ، يتم أيضًا تفريغ ملف pcap_dump ويمكنك فحصه عن كثب في Wireshark لاحقًا.

2
hobbs

ألقِ نظرة على Chaosreader . على الرغم من أن الأمر أكثر قليلاً مما تسأل عنه وبشكل مختلف قليلاً ، ربما يمكنك تعديل الكود الخاص به للقيام بما تريد.

0
Andrew Y