Използване на 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}'

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Използване на tcpdump за прехващане на стринг от писмо, 5.0 out of 5 based on 1 rating

4 thoughts on “Използване на tcpdump за прехващане на стринг от писмо”

  1. За по-лесно можеш да промениш баш скрипта така:
    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).

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. Мдам добра идея е, но в този случай pipe на 100% не искам да правя понеже ми се налага да гледам и други подобни съобщения които търся(за целта ми трябва да го има и физически) (btw като се замисля ако ползвах bash може би е добре да се ползва sed с pipe и така се пести един ред). Аз лично ползвах това на php, че ми писна с тоя bash вече 91991 години.

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  3. Ами като ти е писнало от bash ползвай perl:)

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  4. Да и отново си прав, но нали знаеш, че е въпрос на предпочитание :). Скоро не ми се налагало да пиша нещо на perl (макар да е е.ати човешкия език). Като цяло ако се гони производителност от тези трите неща задъжително трябва да е на perl.

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

Вашият коментар

Вашият email адрес няма да бъде публикуван Задължителните полета са отбелязани с *