tcpdump: "প্যাকেটগুলি বন্দী করা" বনাম "ফিল্টার দ্বারা প্রাপ্ত প্যাকেটগুলি"


11

আমাদের কাছে একটি স্ক্রিপ্ট রয়েছে যা কল করে

tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap

একাধিক আইপি-এস-তে যখন স্ক্রিপ্টের অন্যান্য অংশগুলি পটভূমিতে কিছু ট্র্যাফিক শুরু করে। প্যাকেটগুলি আমাদের কাছে ফিরে আসছে কিনা তা আমরা যাচাই করতে চাই এবং প্যাকেজগুলি গ্রহণ করার সময় কেবলমাত্র সেই ক্ষেত্রেই ম্যানুয়ালি পরীক্ষা করে দেখি। tcpdump এর ত্রুটি আউটপুট প্রথমে এটির জন্য ভাল মনে হয়েছিল, তবে।

প্রশ্নটি হ'ল সাবজেক্টটি হিসাবে, "প্যাকেটগুলি বন্দী করা" এবং "ফিল্টার দ্বারা প্রাপ্ত প্যাকেটগুলির" মধ্যে পার্থক্য কী? ক্যাপচার রয়েছে, যা কোনও প্যাকেট রেকর্ড করেনি, তবে আউটপুট "0 প্যাকেটগুলি ধরা পড়েছে, ফিল্টার দ্বারা 2 টি প্যাকেট প্রাপ্ত হয়েছিল" যা কোনও বৈপরীত্য বলে মনে হয়, যেহেতু কোনও প্যাকেটগুলি ক্যাপচার না করা হয়েছিল, তার মধ্যে 2 টি কীভাবে ফিল্টার করা হয়েছিল? প্রথমে, আমরা "0 টি প্যাকেটগুলি ফিল্টার দ্বারা প্রাপ্ত" সন্ধান করছিলাম তবে কোনও প্যাকেট প্রাপ্ত না হওয়ার পরে এটি ত্রুটিযুক্ত আউটপুটটিতে সর্বদা লিখিত হয় না। তাহলে এই সংখ্যাগুলি কী দেখায়?

আমার যখন জবাব প্যাকেটগুলি পাওয়া যায় নি তখন সেগুলি ফিল্টার করতে চাইলে কী সন্ধান করতে হবে তা আমার জানা দরকার।

উত্তর:


12

আমি আশা করি এটি সমস্যার বিষয়ে কিছুটা আলোকপাত করবে। ম্যানপেজ থেকে :

যখন tcpdump প্যাকেটগুলি ক্যাপচারিং শেষ করে, এটি গণনাগুলির প্রতিবেদন করবে:

প্যাকেটগুলি ক্যাপচার করা হয়েছে (এটি এমন প্যাকেটের সংখ্যা যা tcpdump পেয়েছে এবং প্রক্রিয়াজাত করেছে);

ফিল্টার দ্বারা প্রাপ্ত প্যাকেটগুলি (এটির অর্থ ওএসের উপর নির্ভর করে যে আপনি টিসিপিডম্প চালাচ্ছেন, এবং সম্ভবত ওএসটি কনফিগার করা হয়েছিল তার উপর - যদি কোনও কমান্ড লাইনে কোনও ফিল্টার নির্দিষ্ট করা থাকে তবে কিছু ওএসে এটি প্যাকেটগুলি গণনা করে কিনা তা নির্বিশেষে তারা ফিল্টার এক্সপ্রেশন দ্বারা মিলিত হয়েছিল এবং এমনকি, তারা ফিল্টার এক্সপ্রেশন দ্বারা মিলিত হয়েছিল, যদিও tcpdump সেগুলি এখনও পড়েছে বা প্রক্রিয়া করেছে তা নির্বিশেষে, অন্যান্য ওএসে এটি কেবল প্যাকেটগুলি গণনা করে যা ফিল্টার এক্সপ্রেশন দ্বারা টিসিপিডম্প পড়েছে কিনা নির্বিশেষে এবং সেগুলি এখনও প্রক্রিয়া করা হয়েছে এবং অন্যান্য ওএসে এটি কেবলমাত্র প্যাকেটগুলি গণনা করে যা ফিল্টার এক্সপ্রেশন দ্বারা মিলেছিল এবং tcpdump দ্বারা প্রক্রিয়া করা হয়েছিল);

কার্নেলের দ্বারা প্যাকেটগুলি ফেলে দেওয়া হয়েছে (ওএসের প্যাকেট ক্যাপচার পদ্ধতিতে যে টিসিপিডাম্প চলছে সেগুলি দ্বারা বাফার স্পেসের অভাবে এই প্যাকেটগুলি ফেলে দেওয়া হয়েছিল , যদি ওএস অ্যাপ্লিকেশনগুলিতে সেই তথ্যটি রিপোর্ট করে; যদি তা না হয় তবে) 0 হিসাবে রিপোর্ট করা হবে)।

এবং ২০০৯ থেকে একটি মেইলিং লিস্ট এন্ট্রি এখানে ব্যাখ্যা করছে:

"ফিল্টার দ্বারা প্রাপ্ত প্যাকেটগুলি" নম্বরটি ps_recvএকটি কল থেকে প্রাপ্ত নম্বর pcap_stats(); বিপিএফের সাথে এটিই bs_recvনম্বর BIOCGSTATS ioctl। এই গণনায় বিপিএফকে হস্তান্তরিত সমস্ত প্যাকেট অন্তর্ভুক্ত রয়েছে; এই প্যাকেটগুলি এখনও এমন একটি বাফারে থাকতে পারে যা এখনও লিবিপক্যাপ দ্বারা পড়া হয়নি (এবং এটি টিসিপিডম্পের হাতে দেওয়া হয়নি), বা সম্ভবত এমন একটি বাফারে থাকতে পারে যা লিবপ্যাক্যাপ দ্বারা পড়েছে তবে এখনও টিসিপিডম্পের হাতে দেওয়া হয়নি, সুতরাং এটি প্যাকেটগুলি গণনা করতে পারে যে "বন্দী" হিসাবে রিপোর্ট করা হয় না

প্রক্রিয়াটি খুব দ্রুত মারা যায়? প্যাকেটগুলি ক্যাপচার -c Nকরার সময় একটি পতাকাও ছিল tcpdump থেকে প্রস্থান করার জন্য exitN

যেহেতু আপনার সমস্যাটি বেশ দক্ষ বলে মনে হচ্ছে, আপনি সরাসরি বা শত শত ভাষার বাইন্ডিংগুলির মধ্যে একটির মাধ্যমেও ব্যবহারlibpcap করতে পারেন

আপনার প্রশ্নের জন্য, যেহেতু সব আপনি পেতে হয় বন্দী প্যাকেজ capture.capফাইল, আপনি শুধু রান যেখানে এটা খালি না এবং এই পরীক্ষা অর্থাত, UHM, লাইন গণনা দিকে তাকাবেন?

tcpdump -r capture.cap | wc -l

ক্যাপচার ফাইলটিতে প্রবেশের সংখ্যা ফিরিয়ে দিতে সম্ভবত libpcap ব্যবহার করার আরও ভাল উপায় আছে ...


1
এছাড়াও, প্যাকেট হ্যান্ডলিং যদি ধীর হয় তবে প্যাকেটগুলি কার্নেলের দ্বারা দেখার আগে NIC হার্ডওয়্যারে ফেলে দেওয়া সম্ভব।
ক্রেগ

@ ক্রেইগ: এই স্ক্রিপ্টটি চালিত বাক্সটি ভার্চুয়ালাইজড, সুতরাং আমি এনআইসির গতি সম্পর্কে জানি না।
অ্যালেক্স বিরো

@ এসআর_: লাইনগুলি সহ খুব ভাল ধারণা, খুব সহজ :) আমি অনুমান করি যে আমাদের -W সুইচটি ব্যবহার করার দরকার নেই, তবে কেবল আউটপুটটিকে একটি ফাইল এবং গণনা রেখার সংখ্যায় পুনর্নির্দেশ করতে হবে। যে ASAP চেক করবে।
অ্যালেক্স বিরো

@ tuareg85: ধরা পড়া প্যাকেট বিশ্লেষণ করার জন্য, -wদুর্দান্ত। আপনি উদাহরণস্বরূপ এর সাথে ওয়্যারশার্ক ব্যবহার করতে পারেন।
sr_

1
খুব শীঘ্রই প্রক্রিয়াটিকে হত্যা করা সম্ভবত সমস্যা নয়, যেহেতু আমরা ট্র্যাফিক বন্ধ করার পরে 3s অপেক্ষা করি, আমি মনে করি এটি যথেষ্ট হওয়া উচিত। এছাড়াও টিসিপিডম্পের ত্রুটি আউটপুটটিও শেষ করার সময় রয়েছে এবং কার্নেলের দ্বারা প্যাকেটগুলি সর্বদা 0 ছিল
অ্যালেক্স বিরো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.