![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Здравствуйте.
Уверен, что пишу не в ту ветку форума (прошу модераторов подкоректировать мой выбор), но надеюсь, что нужные мне светлые головы здесь найдутся ![]() Пришло время начать делать бакалаворскую. Долго искал темы, те что выбирал Я, не могли осилить преподы (у них свой специфический круг знаний), те темы что предлагались мне, немог осилить я (уж очень специфичны, не интерестны и трудаемки по времени). И вот свершилось! первая более менее интерестная тема - сделать спам фильтр для почтового клиента... Вот только в моем представлении, это небольшая функция, которая просматривает текст письма и сверяет по базе, на наличие незаконных словосочетаний. Еще краем уха слышал, что где то есть черные списки ПК рассылающих спам по сети, но вроде бы эти списки уже не справляются с объемами (задачами) и их решили закрыть. Вопросы, пока теоретические: 1) Какие типы спама бывают? 2) Какие методики борьбы со СПАМом Вам известны? Думаю, штук 7-11 вполне хватит... 3) Чем опастны письма? Понятно, что это трафик, забитость каналов, а к письму может быть прикреплен архив с вирусами или троянец, но еще что? 4) Как ловят спамеров? Их вообще как-то ловят? Какие спицифические улики выводят на спамеров? 5) За что сажают у нас и за бугром? Какие статьи УК есть? 6) Есть ли исхоники антиспамовских программ в интернете? Есть ли шанс написать приличную (всмысле на 5) баколаврскую работу по этой теме? З.Ы. Ну, думаю, если шанс есть, то не буду создавать новых веток, здесь собирем обширный материал рунета и будем обсуждать ключевые места кода. |
|||
|
||||
ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Смотря по каким критериям делить. Методики борьбы или определения спама?
Ну, наверно, почти всё ты и перечислил. Я бы ещё добавил мошенничества. Как-то ловят ![]() Есть. Ветка кстати не та.
Думаю можно. Кстати ты будешь бакалавром ![]() -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Ответ конечно веселый, но...
1) По каким критериям можно делить спам, какие виды спама принадлежат к определенному критерию? 2) Интерисуют методики борьбы, чтоб реализовать. Кстати, к фильтрации по ключевым словам нашел статьи по вычислению спамерского ПК antispam.ru
Дай ссылочку ![]() ![]() |
||||
|
|||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Какие вопросы - такие и ответы.
Например: 1. По способам распространения: e-mail, sms и т.д. 2. По типу содержимого: реклама, разного рода мошенничества, вирусные рассылки, рассылки для блокирования или вывода из строя почтовой системы и т.д. Основные методики - "цветные" списки, ну и широко распространённый Байес. Ну например SpamAssasin. Правда я не уверен что он тебе поможет. Это сообщение отредактировал(а) ptr - 4.3.2007, 16:09 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
OK
Нашел ссылку www.spamtest.ru |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
В продолжении вопроса "Служба SMTP" родился новый:
Как я могу отослать себе письмо Я указываю SMTP сервером localhost, но вот какое имя почтового ящика указать теряюсь. Как то термины в справке мелкософта с моими расходяться. Вообщем так: надо настроить SMTP сервер на своей машине и отослать туда письмо из моей программы... Помогите |
|||
|
||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: 1 Всего: 1 |
neosapient читай форум про smtp есть много чего...
![]() --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Читал и даже пытался что то сделать: SMTP клиент, транзакции не проходят, кстати всем помогавшим спасибо ![]() Сейчас вопрос стоит так: надо настроить SMTP сервер на своей машине и отослать туда письмо из моей программы |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Подключаешься к туда, где у тебя стоит сервер. Если на локальной машине, то на localhost. Почтовые ящики надо создавать на сервере. Да и кстати какой сервер? -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Этот логический вывод Я смог сделать САМ - значит несовсем безнадежен ![]()
Сервер от M$ под WinXP SP2 Pro Добывается здесь: - ПУСК - Настройка - Панель иправления - Установка и удаление программ - Вкладка "Установка компонентов Windows" - Выделяешь "Internet Information Services (IIS)" - Нажимаешь на кнопку "Состав" - Ставишь галачку напротив "Служба SMTP" (автоматически выделяться дополнительно необходимые компоненты).
В этом хуже, как их создавать не разобрался. Когда слал, то ожидал сообщений об ошибках в папках для отчетов, но ничего не приходило. Можешь посоветовать другой SMTP-сервер, чтоб поставить локально на своей машине, и имел интуитивно понятный интерфейс? Это сообщение отредактировал(а) neosapient - 27.3.2007, 11:12 |
||||||
|
|||||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Посмотри, например, hMailServer. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
что-то я хелпа не нашел, а закладок много.
Помоги создать почтовый ящик в этой програмке |
|||
|
||||
Бонифаций |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 827 Регистрация: 15.9.2005 Где: Brisbane Репутация: нет Всего: 40 |
Я думаю Вам интересно будет прочитать работу Грэхема "A plan for spam" о применении обучаемых Баесовских фильтров против спама. На ее основе сейчас работает большинство коммерческих и опен-сорсных спам-фильтров
http://www.paulgraham.com/spam.html -------------------- Бонифаций. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Спасибо, интерестно будет почитать
|
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Выбирай любой ![]() http://www.hmailserver.com/documentation/v...c_configuration Кстати о книгах. Думаю эта книга будет тебе полезна. Это сообщение отредактировал(а) ptr - 28.3.2007, 15:05 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
PTR, ты как всегда выручаешь
![]() За ссылки спасибо, обязательно завтра просмотрю (сегодня времени нет) А беглый осмотр показал - книжка весьма интерестная Это сообщение отредактировал(а) neosapient - 28.3.2007, 22:58 |
|||
|
||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Ящик вроде создался ![]() Но вот через telnet к нему не подключиться |
||||
|
|||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Глобально проблема стоит так: для почтового ящика не задать пароль... Подключался через telnet к своей машине - localhost Работал по протоколу SMTP (там не требуется авторизации) и всё хорошо проходило. Работал по протоколу ESMTP, и авторизацию пройти не удалось. Сейчас пытаюсь написать класс для протокола POP3, но там также нужна авторизация Значит так. На локальной машине localhost установлен hMailServer. На нем создан домен something.com Далее создан почтовый ящик ken (задать пароль почтовому ящику неудается... :( ![]() Вот собственно и весь диалог с hMailServer...
Это сообщение отредактировал(а) neosapient - 8.4.2007, 19:05 |
||||
|
|||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Вот еще проблемка
Протокол POP3. Вызов LIST Должно
по факту отрабатывает
То есть функция recv(...) за один раз принимает только первую строку вплоть до "\n\r" А при повторном вызове виснет. Типа сервер ничего в неё не шлет, а наоборот ждет что-то от меня, но ЧТО? |
||||
|
|||||
ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
А как ты хотел? Чтобы ты ввёл имя ящика и тебе сразу сказали, что его нет. Это же мечта спаммера. Тебе уже всё написали. Пользователь [email protected].
Ну ты блин даешь ![]() В accounts->... есть поле Account password: <<ENCRYPTED>>. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
||||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
В смысле не фиксируется? Ты "применить" нажимал? -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
нажимал Ладно, основноё вопрос сейчас другой: |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Выкладывай код (там где приём данных и где виснет).
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Там сам разобрался Была одна грубая ошибка - после логина и после пароля ставил пробел и лишь затем "\r\n" И другая вещь, после отправки LIST, надо отправить NOOP Сейчас другая проблема, отправляю RETR, получаю размер письма отправляю NOOP, получаю неполный заголовок письма а как дальше получить оставшуюся часть письма? В моей программе получение письма происходит в файле TProtocolPOP3.cpp методе GetMessage(...) case 3: ... if(i==3){ /*вот тут собственно и происходит поучение письма*/ } Это сообщение отредактировал(а) neosapient - 30.4.2007, 18:24 Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Какие ещё NOOP? Зачем?
Я уже устал говорить, что send/recv отправляет/принимает байт не больше, чем ему сказано. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
А ты попробуй в функции GetListID закомментировать
send(nSMTPServerSocket, (LPSTR)"NOOP\r\n", strlen("NOOP\r\n"), 0); будут проблемы - всех данных не получишь и подвиснишь. |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Ну закоментировал я NOOP. Ну да всё повисает. Но это уже твоя ошибка. Ты где-то лишний recv вызываешь. Да и убери все sleep.
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
recv не лишнее, так как
сначала приходит +ОК 2 messages (320 octets), и только при повторном recv (на котором виснет) получает список 1 120 2 200 А вот если ставить NOOP перед вторым вызовом recv (на котором виснет), то все отлично получается. А Sleep`ы нужны для мелких задержек, так как сервер не справляется со скоростью формирования ответов (или я быстро закрываюсь). При наличии Sleep`ов сервер успевает сформировать полный ответ для меня Так что так... Эти вещи нужны, я шишки на них набил - значит нужны |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
А... переписал в более цивильный вид - всё нормально работает, теперь буду искать ошибку в классах
Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Уже лучше. Я бы ещё добавил функцию чтения строки (до \r\n) и записи всей строки в сокет.
Это сообщение отредактировал(а) ptr - 5.5.2007, 07:58 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Переписал класс (не полностью - местами)
Ну что в итоге - есть ошибки диагностируемые и не очень... :( У меня есть метод char* TProtocolPOP3::iFindFirstInt(char* pzStr,int& iNum); В первый параметр передается указатель на строку. Символы в строке перебераются, пока не получу ближайшее число. Через второй параметр это число возвращается. А сама функция возвращает указатель на первый символ после числа в исходной строке, либо ноль при неудаче. Но проблема не в этом методе, а в операции new. Есть метод, который помогает узнать список писем. TProtocolPOP3::GetListID(int*& piMessageID, int*& piMessageSize, int& iNumMessage) При первом запуске iFindFirstInt(...) из полученого с сервера сообщения узнаю, сколько писем в списке. // ищем кол-во писем ptr = iFindFirstInt(psBuf,iNumMessage); Но далее, пытаюсь выделить память, а оператор new возвращает NULL // создаем возвращаемые переменные piMessageID = new int [iNumMessage]; piMessageSize = new int [iNumMessage]; if(piMessageID==NULL)return 0; if(piMessageSize==NULL)return 0; Вопрос, почему в данной ситуации new не выделяет память? Как сделать так, чтоб память выделялась? P.S. Такая фигня в VC7, в VC6 все нормально работает Это сообщение отредактировал(а) neosapient - 6.5.2007, 14:09 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
А что регулярные выражения уже не в моде? Ты уверен что new передаётся положительное число?
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Sorry, ненаписал, что вопрос уже решен
http://forum.vingrad.ru/forum/topic-149872...ient/index.html Вот рабочий вариант Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Продолжаем
Ищю ТЕМУ письма вот с rambler.ru её вырезал Subject: =?Windows-1251?B?UnVzRkFRLnJ1IC0gLyDKzszP3N7SxdDbIMggz84gLyDf5/vq6CDv8A==?= =?Windows-1251?B?7uPw4Ozs6PDu4uDt6P8gLyBDL0MrKw==?= эквивалентно RusFAQ.ru - / КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++ Какой функцией воспользоваться чтобы преобразовать первое во второе? |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Это base64. Ну и win-1251.
Это сообщение отредактировал(а) ptr - 3.6.2007, 17:30 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Думаю точно также, но... Заюзал для расшифровки Base64Decode(...), которая выполняется с ошибкой. |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: нет Всего: 14 |
в base64 входят символы:
-------------------- korbian © |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
neosapient, надеюсь ты не всю строку декодировал?
Расшифровываю: =? - маркер начала. Win-1251 - кодировка. ? - разделитель. B - тип кодирования (B - base64, Q - Quoted-printable). ? - разделитель. UnVzRkFRLnJ1IC0gLyDKzszP3N7SxdDbIMggz84gLyDf5/vq6CDv8A== - текст. ?= - маркер конца. Для второй строки аналогично. Таким образом надо декодировать VzRkFRLnJ1IC0gLyDKzszP3N7SxdDbIMggz84gLyDf5/vq6CDv8A== (RusFAQ.ru - / КОМПЬЮТЕРЫ И ПО / Языки пр) и 7uPw4Ozs6PDu4uDt6P8gLyBDL0MrKw== (ограммирования / C/C++). А вообще почитай RFC 4096 и 2047. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Теперь новая задача.
Не связаная напрямую с программированием. Мне надо найти статистику по уровням фильтрации спама и уровням ложных срабатываний самых распрастраненных спам-фильтров (лучше для клиентских приложений) Сводную таблицу через поиск в яндексе найти не удалось :( |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: нет Всего: 14 |
ИМХО, такую информацию тебе очень трудно будет найти. Фирмам производителям коммерческих продуктов публикации такого рода крайне не желательны. -------------------- korbian © |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Сравнительный анализ серверных спам-фильтров
Название Используемые технологии Фильтрация/УЛС Brightmail лексические, сигнатурные, 95% / 0,0001% фильтры URL Skeptic проверки IP, 95% / 0,0004% эвристические методы, поддержка Unicode, байесовая оценка MailShell сигнатурный детектор 99% / нет (в тестах производителя) массовых рассылок, эвристические методы, байесовая оценка SpamAssassin эвристические методы, 70-98% / 0.0014-0.15% байесовая оценка Спамтест лингвистические эвристики 85-95% / 0,001-0.005% Спамооборона сигнатурный детектор 90% / 0,001% массовых рассылок Всем спасибо Ptr + Это сообщение отредактировал(а) neosapient - 30.6.2007, 14:36 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |