perl + потоки ввода вывода. вопрос.
pop_b4_smtp ваяешь?
всё понял, что значит b4
вообще, да, хотя и не только это, там много чего нужно изменить, а ящиков больше 100.
пиши
do{$a=$1; $pass=$2} if m!^(.*?): (.*?)$!;
мож получится
2) http://computer.edu.ru/lib/cookbook/ch16_08.htm
3) я вообще не понял, какие еще разрывы
![](/images/graemlins/smile.gif)
я как то делал такую-же шнягу
http://genphys.phys.msu.ru/~dmitriyk/perl/files/pop_b4_smtp....
она даже работала какое-то время
...
мусор USER (то, что нужно)\n
ну этот сендмайл- я с ним уже намучался.
$user=$1 m!^USER:(.*?)$!;
?
Задача, которую ты себе поставил(а) вставала уже перед множеством людей. И многие её решили с помощью снифера, готовые решения можно найти в портах FreeBSD.
Насколько я понял, у тебя сейчас задача мигрировать с одной почтовой системы на другую, причём в первой пароли зашифрованы. Я решал такую задачу трижды и каждый раз следующим способом. Делался хак к аутентификатору старой почтовой системы, которые в случае успешного логина добавлял логин/пароль в базу новой почтовой системы. Обычно этот хак делается на языке Це и умещается в один экран.
насамом деле я никогда m4 не пользовался, там в дефолтном конфиге надо 3 строчки подправить и все окей будет для просто сервака торчащего в инете и не требующего никаких особых настроек.
2. если уж на то пошло, то может проще написать враппер?
-p - я что-то не понял, что делает
-p Don't put the interface into promiscuous mode. Note that the
interface might be in promiscuous mode for some other reason;
hence, `-p' cannot be used as an abbreviation for `ether host
{local-hw-addr} or ether broadcast'.
а насчёт сниффера.. - конечно, поаккуратнее будет.
chomp;
$_ = $acco_string;
не работает тот, который закоментен
не работает тот, который закоментенне знаю, у меня все работает...
![](/images/graemlins/confused.gif)
да я понимаю, что должен работать.
Может в тех данных, которые ты скармливаешь, после USER не пробел стоит а что-то другое? \t например?
без chomp - всё в порядке, только $user содержит перевод каретки в конце строки.
![](/images/graemlins/laugh.gif)
PS.
[xenon ~]$ printf "USER a\n PASS b\n" | perl xxx.pl
USER: a:PASS: b
[xenon ~]$ printf "USER a\r\n PASS b\n" | perl xxx.pl
:PASS: b
Надо было заметить что 'USER:' тоже пропало, прежде чем на chomp пенять
![](/images/graemlins/tongue.gif)
![](/images/graemlins/wink.gif)
-p - чтоб не заставлять интерфейс ловить чужие пакеты
а не подскажешь, как там конец строки убрать, а то в перле я не особо силён
chomp список
Удаляет в конце строки символ указанный переменной $/. Обычно это 'LF'. Возвращает количество удаленных символов. Если переменная не указана то используется переменная $_. Если указан список то обрабатывается каждая строка списка и возвращается общее количество удаленных символов.
------------------------------
chop переменная
chop список
Полностью аналогично функции chomp но всегда удаляет последний символ строки.
спасибо!
Оставить комментарий
Irina22
что мне было нужно:сделать базу login:password для почты, есть рут на сервере, пароли plain text.
что сделал:
pwddump.pl
запускаю:
- на экран не выводит.
хотя:
с перлом я не очень знаком..
так вот два вопроса
1) как поправить скрипт, чтобы работал chomp
2) как запускать, чтобы выводил на экран или в файл tcpdump ... | ./pwddump.pl
есть подозрение, что tcpdump выводит результат работы не в стандартный вывод, а куда-то ещё, только я не нашёл, куда.
3)на некоторых системах(или версиях) у tcpdump есть опция -A(которая показывает содержимое пакета в acsii в некоторых нет, на этой - нет, можно только смотреть
и текст получается разрезанным, как от этого избавиться я не нашёл.