tcpdump: গ্রিপবেল আউটপুট কিভাবে পাবেন?


13

আমি এমন একটি সমস্যা সমাধানের চেষ্টা করছি যেখানে আমার কাছে কেবল কোনও অ্যাপ্লায়েন্সিতে টিসিপিডাম্প পাওয়া যায়। ওয়েব ট্র্যাফিক ফিল্টার করতে আমি tcpdump ব্যবহার করতে চাই এবং নির্দিষ্ট স্ট্রিং যুক্ত ট্র্যাফিক কেবল প্রদর্শন করি।

আমি নিম্নলিখিতটি করি:

tcpdump -nei eth0 -X | grep "something interesting"

আউটপুটটি 16 বাইট পিআর লাইন সহ একটি হেক্সভিউ। ডেটা একাধিক লাইনে উপস্থাপন করা হওয়ায় আমি এই ডেটা গ্রেপ করতে পারি না।

Tcpdump- এর জন্য একটি একক লাইনে ক্যাপচারিত ডেটা উপস্থাপন করার উপায় আছে কি? এটি আকর্ষণীয় প্যাকেটগুলি খুঁজে পেতে গ্রেপ ব্যবহার করা সম্ভব করে তুলবে।


1
ভাল, আমি এখনই এটি পরীক্ষা করতে পারছি না তবে যদি আপনার একাধিক লাইন থাকে তবে আপনি করতে পারেন টিআর-ডি '\ n' বা
গ্রেপ-

@ বারলপ, গ্রেপ-সি সাজানো কাজ, তবে অবিশ্বাস্য, কারণ আমি কখনই জানি না যে শিরোনামটি কত লাইন থাকবে এবং আমি ম্যাচের নীচের লাইনগুলি দেখতে পাব না। টিআর কমান্ড সমস্ত আউটপুটকে 1 লাইনে ছড়িয়ে দেয় , সুতরাং এটি কিছুটা বেশি।
কুকুর খাওয়ার বিড়াল বিশ্ব

নিম্নলিখিতটি গ্রেপ হবে না, তবে tcpdump হেক্স দ্বারা স্ট্রিংগুলির সাথে মেলে যা কোনও রেইজেক্স ছাড়াই মূলত গ্রেপ। আপনি একটি অফসেট নির্দিষ্ট করতে পারেন। আমি এটি একটি ফাইলে লিখেছি (উইন্ডাম্প দিয়ে সম্পন্ন হয়েছে তবে আমি এটি কেবল tcpdump এর একটি উইন্ডোজ সংস্করণ তাই tcpdump অনুমান করি) tcpdump -nXr zfile "tcp [32: 4] = 0x47455420"
বারলপ

tcpdump -nei eth0 -X | grep --line-buffered "something interesting"করবে, নির্বিঘ্ন কারণে আমার বৈধ কাজের উত্তর মুছে ফেলা হয়েছে।
sjas

উত্তর:


11

আপনার মতো যারা ব্যবহার করতে পারবেন না তাদের জন্য প্যাকেটের সামগ্রীগুলির আউটপুট গ্রেপযোগ্য করতে ngrepএখানে কীভাবে ব্যবহার awkকরবেন তা এখানে tcpdump

tcpdump -xকাজটি সামনে উপস্থাপনের জন্য প্রথমে কিছু নমুনা আউটপুট সরবরাহ করা হয়েছে:

$ tcpdump -xr dump.pcap 2>/dev/null
12:04:59.590664 IP 10.17.14.93.51009 > 239.194.1.9.51009: UDP, length 370
        0x0000:  4500 018e 0000 4000 fa11 7625 0a11 0e5d
        0x0010:  efc2 0109 c741 c741 017a 6f28 1120 2020
        0x0020:  3337 3030 3039 3031 3835 3635 3430 3130
...

এবং এটি হ'ল অনুলিপি-এবং-গতযোগ্য awkস্ক্রিপ্ট যা আপনি আউটপুটটি পাইপ করতে পারেন

awk '{ if (match($0, /^[0-9]/, _)) { printf (NR == 1 ? "%s " : "\n%s "), $0; fflush() } else { sub(/^\s+0x[0-9a-z]+:\s+/, " "); gsub(" ", ""); printf "%s", $0 } } END { print ""; fflush() }'

নিম্নলিখিত, গ্রেপবল আউটপুট পেতে

12:04:59.590664 IP 10.17.14.93.51009 > 239.194.1.9.51009: UDP, length 370 4500018e00004000fa1176250a...
12:04:59.590798 IP 10.17.14.113.51011 > 239.194.1.11.51011: UDP, length 370 4500018e00004000fa11760f...
...

নীচে উপরের স্ক্রিপ্টটির একটি মন্তব্য করা সংস্করণ রয়েছে:

awk '
{
    # if this is a header line
    if (match($0, /^[0-9]/, _)) 
    {
        # print the header, but:

        # except for the first line,
        # we need to insert a newline,
        # as the preceding data lines
        # have been stripped of theirs

        # we also append a space to
        # separate header info from the
        # data that will get appended
        printf (NR == 1 ? "%s " : "\n%s "), $0
        # enforce line-buffering
        fflush()
    }
    # otherwise it is a data line
    else 
    {
        # remove the data address
        sub(/^\s+0x[0-9a-z]+:\s+/, " ");
        # remove all spaces
        gsub(" ", "");
        # print w/o newline
        printf "%s", $0 
    }
}
END
{
    # print final newline, as
    # the preceding data lines
    # have been stripped of theirs
    print ""
    # enforce line-buffering
    fflush()
}'

2

tcpdumpম্যানপেজ থেকে :

-A      Print each packet (minus its link level header) in ASCII.  Handy
        for capturing web pages.

-s 0পুরো প্যাকেটটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য আপনি বিকল্পটিও ব্যবহার করেছেন তা নিশ্চিত করুন।


ধন্যবাদ, তবে এখনও ডেটা মাল্টিপল লাইনে উপস্থাপন করা হয়েছে - যেখানেই ওয়েবপৃষ্ঠায় এতে নতুন লাইন রয়েছে। গ্রেড আউটপুটটির সাথে শিরোনামটি (এবং বাকী ডেটা) যুক্ত করতে আমার সমস্যা হয়।
কুকুর

আমি কেবল বুঝতে পেরেছিলাম যে সরঞ্জামটিকে কেন awk ওয়ার্ড
কুকুর খাওয়া বিড়াল বিশ্ব

1

আপনি ngrepকমান্ডটি একবার দেখতে চান :

ngrep -W single -d eth0 'regex to match' 'port 80'

কোথায়:

  • -W single একক লাইন বিন্যাস নির্দিষ্ট করে
  • regex to match মানে কেবল নির্দিষ্ট স্ট্রিংযুক্ত প্যাকেটগুলি ফেলে দেওয়া।
  • 'port 80' কেবল প্যাকেটগুলি 80 থেকে বা পোর্টে স্নিফ করতে পিসিএপি ফিল্টার

1
এনগ্রিপ ব্যবহার করতে চাই তবে এ জাতীয় কোনও সরঞ্জাম নেই - এটি একটি সরঞ্জাম ...
কুকুর খাওয়ার বিড়াল বিশ্ব

ngrep দুর্দান্ত। আমি কয়েক ঘন্টা অনুসন্ধান করছিলাম যে কোন হোস্টটি আমার হোস্টে এইচটিটিপি ট্রাফিক তৈরি করছে। একক সুডো এনগ্রেপ "জিইটি .." সহ মিনিটের মধ্যে উত্তর খুঁজে পেয়েছে।
বার্তোসজ বিলিকি

0

আপনার আউটপুট হেক্স হওয়ার কারণটি -Xপতাকা। চেষ্টা করুন:

tcpdump -ni eth1 | grep something_interesting

আপনি ক্লাইমের ডান পাঠযোগ্য আউটপুট পাবেন।


হ্যাঁ, তবে এতে প্যাকেটের সামগ্রী থাকবে না।
রালফ্রেডল

0

আমি যা চাইছিলাম তা করার জন্য আমি awk স্ক্রিপ্টটি পেলাম না এবং এনগ্রিপ ইউএসবি-র মাধ্যমে কোনও ইথারনেটে কাজ করবে না, তাই আমি tcpdump দ্বারা লাইন আউটপুটটিতে যোগ দিতে একটি ছোট সি প্রোগ্রাম লিখেছিলাম যাতে তারা গ্রেপযোগ্য হয়। এটি https://gitlab.com/dargaud/TcpDumpJoin এ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.