سؤال ما هي أسهل طريقة لاستطلاع بيانات حركة مرور 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 أو بيانات التعريف الأخرى
  • عرض "البيانات" التي يتم إرسالها فقط ، وليس الحزم الفردية ورؤوسها
  • طباعة البيانات كما هي ، وليس في سداسي عشرية ، وليس مع علامات حزمة الإزاحة
  • شم الكل حركة مرور الشبكة (سواء كان مشغلاً ETH0 أو eth1 أو لو، الخ ...)

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

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


74


الأصل


tcpdump هو الأمر السحري الذي تريده. Wireshark هو واجهة المستخدم الرسومية لطيفة على رأس استخدامات tcpdump المكتبة - Vinko Vrsalovic
أعرف أن هذا سؤال قديم ولكني أشعر بالفضول لمعرفة لماذا استخدام nc لـ "server server" لم يكن كذلك؟ ينشئ "nc -l 1234" خادمًا يستمع على المنفذ 1234 ويقوم بطباعة ما يتم إرساله إليه وإغلاق الاتصال. إذا كنت ترغب في الحفاظ على الاتصال قيد الحياة وعدم قطع الاتصال ، يمكنك إضافة الخيار "-k". - StFS
StFS لأنه يريد أن يشم منفذ قيد التشغيل وسيشكو nc. - infoclogged


الأجوبة:


تحديث: 

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

sudo tcpflow -i any -C -J port 1234

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


شكراً لـ إيف للإشارة إلى "tcpflow". هنا خط commmand:

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

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

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

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

لقد قمت بتثبيت tcpflow ببساطة عن طريق القيام به

sudo apt-get install tcpflow

102



رائع. tcpflow رائع ، شكرا! أنقذني من آلام الألم التي كنت أواجهها مع wireshark. Wireshark ، tcpdump ، الخ لديها الكثير من المعلومات ولا تفعل في الواقع ما يطلب السؤال الأصلي. tcpflow على ما يرام لهذا الغرض. - Russ
من tcpflow النسخة 1.3 -e يستخدم الخيار لتحديد اسم الماسح الضوئي. لذا فإن الخطأ "Invalid scanner name '8983'" مطبوع. الأمر الصحيح هو sudo tcpflow -i any -C -J port 1234 - Michal Kováč
لاحظ أن -J تم تغيير ل -g في الإصدار الأخير (الإصدارات). - tvon
يحتاج شخص ما أن يشرح لمؤلفي الأداة ما تعنيه عبارة "التوافق مع الإصدارات السابقة"! - Sridhar-Sarnobat
يطبع "أشياء" مرتين ، بالنسبة لي. لماذا هذا ؟ lpaste.net/3984129577801744384 - user1198559


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

$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

27



لنفترض أنه ليس لديّ سيطرة على العميل والخادم ، (أو لا أريد إيقافه) ، لذا لا يمكنني تغيير المنفذ المعني أو اعتراض حركة المرور. ثم ماذا؟


محاولة إيثار ريال. إنه محلل بروتوكول ممتاز يستهدف لينكس وويندوز.


20



تجربتي هي أن الواجهة تمتص لينكس. - Joe Phillips
لعنة ، كنت هناك قبل لي ، +1 على wireshark
يمكنك إعطاء مثال على سطر الأوامر؟
إلقاء نظرة على هذا الرابط wiki.wireshark.org/Tools انه يعطي قائمة من أدوات سطر الأوامر ل wireshark. ابحث عن Dumpcap. - Kevin Boyd


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

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

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

192.168.101.102.02345-010.011.012.013.45103

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

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

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

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

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


13





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


2





إلقاء نظرة على Chaosreader. على الرغم من أنه يفعل أكثر قليلاً مما تطلب وتختلف اختلافًا طفيفًا ، ربما يمكنك تعديل الرمز الخاص به للقيام بما تريد.


0





ربما يمكنك كتابة غلاف لبرنامج tcpdump ، على سبيل المثال ، والذي سيزيل كل المعلومات المتكررة


-1