Използване на tcpdump за прехващане на стринг от писмо

Тук идеята ми е, че на моменти получавам писмо от конкретен адрес ( или не) и съдържанието му е много важно. Толкова важно, че искам да го видя веднага в най- лесния вариант. Да речем че получавам като важно съдържание едно изречение (стринг).

Решението което имам (използвам собствен mail server с root access): Пускам tcpdump да логва всички пакети на 25 порт и след това парствам за конкретния стринг. Ето един много лесен пример за 2 мин:

tcpdump -s 1500 -lXvvi eth3 port 25|awk -F ‘ ‘ ‘{print $10}’ >> /tmp/aa.txt

Ето едно малко php което парсва и показва ако го има:

function dhs_lr_str($a,$b,$c,$num=1){$a=explode(„$a“,$c);$b=explode(„$b“,$a[$num]);return addslashes(trim($b[0]));};

$buffer=file_get_contents(„/tmp/aa.txt“);
$buffer=str_replace(„\n“,“,$buffer);
$buffer = preg_replace(‘#\r?\n#’, “, $buffer);
$buffer = preg_replace(‘/\s\s+/’, ‘ ‘, $buffer);

preg_match_all(„/lqva_chast(.*?)dqsna_chast/“, $buffer, $matches);
$search_words=array_unique($matches[1]);

echo „<table border=’1’><tr><td><b>N</td><td><b>Link</td></tr>“;
foreach ($search_words as $value)
{
$i++;echo „<tr><td><b>$i</td><td>$value</td></tr>“;
};
echo „</table>“;

Може и с bash:

#Премахва \n
cat /tmp/aa.txt|sed -e :a -e ‘$!N;s/\n//;ta’  > /tmp/a.txt
#Парсва търсения стринг между „lqva_chast“ X „dqsna_chast“
cat /tmp/a.txt|awk -F ‘lqva_chast’ ‘{print $2}’|awk -F ‘dqsna_chast’ ‘{print $1}’

Категория:

4 отговора

  1. Аватарът на Marto

    За по-лесно можеш да промениш баш скрипта така:
    tcpdump -s 1500 -lXvvi eth3 port 25|awk -F ‘ ‘ ‘{print $10}’ | sed -e :a -e ‘$!N;s/\n//;ta’ | awk -F ‘lqva_chast’ ‘{print $2}’|awk -F ‘dqsna_chast’ ‘{print $1}’

    Това ще следи постоянно входящия поток и не е необходимо писането на различни команти.

    btw awk има опция за измъкване на substring (с начален и краен delimiter).

    1. Аватарът на Мартин Петров

      Мдам добра идея е, но в този случай pipe на 100% не искам да правя понеже ми се налага да гледам и други подобни съобщения които търся(за целта ми трябва да го има и физически) (btw като се замисля ако ползвах bash може би е добре да се ползва sed с pipe и така се пести един ред). Аз лично ползвах това на php, че ми писна с тоя bash вече 91991 години.

  2. Аватарът на Marto

    Ами като ти е писнало от bash ползвай perl:)

  3. Аватарът на Мартин Петров

    Да и отново си прав, но нали знаеш, че е въпрос на предпочитание :). Скоро не ми се налагало да пиша нещо на perl (макар да е е.ати човешкия език). Като цяло ако се гони производителност от тези трите неща задъжително трябва да е на perl.

Logged in as {{omniform_current_user_display_name}}. Edit your profile. Log out? Required fields are marked *

Your email address will not be published. Required fields are marked *

Comments are closed.

You must be logged in to post a comment.