Форум сайта python.su
Здравствуйте друзья.Помогите пожалуйста новичку справиться с непростой задачей. Добавить в прикрепленный файлик “Черный” список доменных имен.
Основная задача стоит в следующем:
Написать DNS прокси-сервер с поддержкой “черного” списка доменных имен.
Для параметров используется конфигурационный файл, считывающийся при запуске сервера;
“Черный” список доменных имен находится в конфигурационном файле;
Адрес вышестоящего сервера также находится в конфигурационном файле;
Сервер принимает запросы DNS-клиентов на стандартном порту;
Если запрос содержит доменное имя, включенное в “черный” список, сервер возвращает клиенту ответ, заданный конфигурационным файлом (варианты: not resolved, адрес в локальной сети, …).
Если запрос содержит доменное имя, не входящее в “черный” список, сервер перенаправляет запрос вышестоящему серверу, дожидается ответа и возвращает его клиенту.
ПРОШУ Вас помочь. Спасибо.
Прикреплённый файлы:
dnschef.py (28,9 KБ)
Офлайн
прежде всего один вопрос…
почему не использовать для блек листа готовые варианты?
Офлайн
ZerG
Здравствуйте. “Вы написали- Почему не использовать готовые варианты?”.
Для меня это сложная задачка,не подскажите что конкретно имеете в виду? Может быть подскажите конкретные примеры? По гуглу,похожего я ничего не нашел, Для меня это направление новое,но пытаюсь разобраться.
Спасибо.
PS: Очень важно выполнить “Основную задачу” использую Python.
Офлайн
Ну основная задача как раз для нас остается загадкой!
Вы опишите пожалуйста суть задачи - ос на которой нужно это сделать а так же работать оно должно в локальной сети или локально на ПК. Без привязки к питону. Возможно есть готовые решения
например
https://github.com/gophergala/dnsp
Отредактировано ZerG (Ноя. 23, 2016 11:06:53)
Офлайн
Написать DNS прокси-сервер с поддержкой “черного” списка доменных имен.
Для параметров используется конфигурационный файл, считывающийся при запуске сервера;
“Черный” список доменных имен находится в конфигурационном файле;
Адрес вышестоящего сервера также находится в конфигурационном файле;
Сервер принимает запросы DNS-клиентов на стандартном порту;
Если запрос содержит доменное имя, включенное в “черный” список, сервер возвращает клиенту ответ, заданный конфигурационным файлом (варианты: not resolved, адрес в локальной сети, …).
Если запрос содержит доменное имя, не входящее в “черный” список, сервер перенаправляет запрос вышестоящему серверу, дожидается ответа и возвращает его клиенту.
Язык разработки: Python
Использование готовых библиотек: без ограничений.
Использованный чужой код должен быть помечен соответсвующими копирайтами, нарушать авторские права запрещено.
Остальные условия/допущения - на усмотрение кандидата.
Отредактировано Tsarneba (Ноя. 23, 2016 12:04:03)
Офлайн
ZerGДаже если это будет локальная сеть на 2 компьютера-такая программа подойдет. Основная задача для меня-простой код,с выполненными выше условиями….я тогда смогу в нем разобраться и каждую составную кода понять…
Ну основная задача как раз для нас остается загадкой!Вы опишите пожалуйста суть задачи - ос на которой нужно это сделать а так же работать оно должно в локальной сети или локально на ПК. Без привязки к питону. Возможно есть готовые решения например https://github.com/gophergala/dnsp
Офлайн
Первая же ссылка в гугле - https://gist.github.com/andreif/6069838
Черный список и чтение думаю дописать можно и самому, что бы в будущем не разочаровать наставника профессионала
Офлайн
Документ прикрепленный ничем не отличается от
VadimKЗагвозка в блеклисте.
Первая же ссылка в гугле - https://gist.github.com/andreif/6069838Черный список и чтение думаю дописать можно и самому, что бы в будущем не разочаровать наставника профессионала
import dns.resolver bls = ["zen.spamhaus.org", "spam.abuse.ch", "cbl.abuseat.org", "virbl.dnsbl.bit.nl", "dnsbl.inps.de", "ix.dnsbl.manitu.net", "dnsbl.sorbs.net", "bl.spamcannibal.org", "bl.spamcop.net", "xbl.spamhaus.org", "pbl.spamhaus.org", "dnsbl-1.uceprotect.net", "dnsbl-2.uceprotect.net", "dnsbl-3.uceprotect.net", "db.wpbl.info"] if len(sys.argv) != 2: print 'Usage: %s <ip>' %(sys.argv[0]) quit() myIP = sys.argv[1] for bl in bls: try: my_resolver = dns.resolver.Resolver() query = '.'.join(reversed(str(myIP).split("."))) + "." + bl answers = my_resolver.query(query, "A") answer_txt = my_resolver.query(query, "TXT") print 'IP: %s IS listed in %s (%s: %s)' %(myIP, bl, answers[0], answer_txt[0]) except dns.resolver.NXDOMAIN: print 'IP: %s NOT resolved %s' %(myIP, bl)
Офлайн
Убрать “try:”, вывести ошибку полностью на экран, поискать в гугле по ошибке. Нужная библиотека будет так же на первой странице поиска.
Офлайн
VadimK
не убрать try, а в except в конце дописать raise
Офлайн