আপনার মতো যারা ব্যবহার করতে পারবেন না তাদের জন্য প্যাকেটের সামগ্রীগুলির আউটপুট গ্রেপযোগ্য করতে 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()
}'