Тук идеята ми е, че на моменти получавам писмо от конкретен адрес ( или не) и съдържанието му е много важно. Толкова важно, че искам да го видя веднага в най- лесния вариант. Да речем че получавам като важно съдържание едно изречение (стринг).
Решението което имам (използвам собствен 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:
Използване на tcpdump за прехващане на стринг от писмо,#Премахва \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}'
За по-лесно можеш да промениш баш скрипта така:
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).
Мдам добра идея е, но в този случай pipe на 100% не искам да правя понеже ми се налага да гледам и други подобни съобщения които търся(за целта ми трябва да го има и физически) (btw като се замисля ако ползвах bash може би е добре да се ползва sed с pipe и така се пести един ред). Аз лично ползвах това на php, че ми писна с тоя bash вече 91991 години.
Ами като ти е писнало от bash ползвай perl:)
Да и отново си прав, но нали знаеш, че е въпрос на предпочитание :). Скоро не ми се налагало да пиша нещо на perl (макар да е е.ати човешкия език). Като цяло ако се гони производителност от тези трите неща задъжително трябва да е на perl.