Можно ли написать брандмауэр в python? Скажем, это заблокировало бы весь трафик?Можно ли написать брандмауэр в python?
ответ
Да, да, это так.
У меня есть код Python, который взаимодействует с Linux iptables для выполнения обязанностей брандмауэра, используя nfqueue. Я могу использовать правило в IPTables, который выглядит следующим образом:
iptables -A INPUT -j NFQUEUE --queue-num 1
И тогда есть некоторые Python код, который выглядит следующим образом:
import nfqueue
from dpkt import ip
q = None
def cb(dummy, payload):
# make decision about if the packet should be allowed. in this case, drop everything:
payload.set_verdict(nfqueue.NF_DROP)
q = nfqueue.queue()
q.open()
q.bind()
q.set_callback(cb)
q.create_queue(1)
q.try_run()
Вот хороший подправить, что приведенный выше код основывается на:
http://blog.yancomm.net/2011/05/nfqueue-packet-mangling-with-python.html
Но как насчет python на окнах? –
Я уверен, что это возможно, но не рекомендуется. Как упоминает mcandre, большинство ОС объединяют сетевые возможности низкого уровня, необходимые для брандмауэра, в ядро, и поэтому эта задача обычно выполняется на C/C++ и тесно интегрируется с ядром. Микроядровые ОС (Mach et al) могут быть более восприимчивыми, чем linux. Возможно, вы сможете смешивать некоторые python и C, но я думаю, что более интересная дискуссия здесь будет «почему я должен// почему я не должен» реализовывать брандмауэр в python, а не просто технически возможно ,
Я не уверен здесь, но гарантируется ли в python, что IRQs своевременно достигают кода пользователя (пересекая слой python)? –
BSD a Microkernel? что? –
@ Gollum: Это сильно зависит от операционной системы и метода уведомления. Нет стандарта для того, чтобы код Python выполнялся как обработчик IRQ ... –
«Да» - это обычно ответ на вопрос «возможно ли это?»? вопросов.
Насколько сложными и конкретными реализациями является нечто иное. Я полагаю, что технически это не так, если бы вы были настроены на быстрый брандмауэр на Python, вы могли бы использовать библиотеки сокетов и открывать подключения к себе и от себя на каждом порту. Я понятия не имею, насколько это было бы эффективно, хотя похоже, что этого не будет. Конечно, если вы просто заинтересованы в том, чтобы кататься самостоятельно и делать это как учебный опыт, тогда классный, у вас долгий путь впереди вас и много образования.
OTOH, если вы действительно беспокоитесь о сетевой безопасности, есть тонн других продуктов, которые вы можете использовать, начиная с iptables на * nix, до ZoneAlarm на окнах. Многие из них являются свободными и безопасными, поэтому нет причин отказываться от вас, кроме как на основе «Я хочу учиться».
Спасибо :) - Он хочет учиться на основе;) Обычно нет необходимости изобретать колесо execpt, если вы хотите знать, как оно было сделано. – Jake
Я уверен, что теоретически вы могли бы достичь того, чего хотите, но я верю, что на практике ваша идея не выполнима (если вы задаетесь вопросом, почему, это потому, что слишком сложно «взаимодействовать» с языком высокого уровня с низким уровнем ядро).
Что вы можете сделать вместо этого - это инструмент Python, который управляет брандмауэром операционной системы, чтобы вы могли добавлять правила, удалять и т. Д. (Аналогично тому, что делает iptables в Linux).
Я вижу. Как добавить правила в брандмауэр? – Jake
В linux брандмауэр управляется командой iptables. Вы можете использовать это для настройки правил брандмауэра. http://linux.die.net/man/8/iptables –
Интересная тема. Я наткнулся на это, глядя на примеры Python NFQUEUE.
Мое мнение, что вы можете создать отличный брандмауэр в python и использовать ядро.
E.g. Добавьте правило linux fw через таблицы IP, которые передают sys-пакеты (первый) в NFQUEUE для python FW, чтобы решить, что делать.
Если вам нравится, отметьте поток/поток tcp с меткой FW, используя NFQUEUE, а затем введите правило iptables, которое позволяет только всем потокам трафика с отметкой.
Таким образом, у вас может быть мощная высокоуровневая программа python высокого уровня, позволяющая разрешать или запрещать трафик и скорость ядра для пересылки всех других пакетов в одном потоке.
Python-iptables обеспечивает привязки python к iptables под Linux. Взаимодействие с iptables достигается с помощью библиотек iptables C (libiptc, libxtables и расширений iptables), не вызывая двоичный файл iptables и не анализируя его вывод.
Очень возможно, и вся структура посвящена его здесь: https://github.com/austin-taylor/bluewall
Вместо того, чтобы размещать ссылки как ответ, добавьте некоторый текст к объяснению, как этот ответ помогает OP в фиксации текущей проблемы. Спасибо –
- 1. Возможно ли написать простой брандмауэр с Python/Scapy для Windows?
- 2. Можно ли написать однострочные в Python?
- 3. можно контролировать брандмауэр Android.
- 4. Android - Можно ли реализовать простой брандмауэр?
- 5. Можно ли это написать?
- 6. Можно ли использовать брандмауэр G6 для использования в NGINX?
- 7. Можно ли написать функцию в AHK?
- 8. Можно ли написать строку в бинарный поток в Python 3
- 9. Можно ли написать код, чтобы написать код?
- 10. Можно ли написать/написать openstreetmap (osm) routeplanner?
- 11. Можно ли написать пользовательские декораторы в D? Подобно python,
- 12. Брандмауэр 4 Брандмауэр безопасности
- 13. Можно ли это лучше написать?
- 14. Можно ли написать постоянное имя?
- 15. Можно ли написать синтаксис как -()()?
- 16. Можно ли написать поверх буфера?
- 17. можно написать конфигурационный файл vagrant в python?
- 18. Можно ли написать Skype-клиент?
- 19. Могу ли я написать screencapture в Python
- 20. Можно ли написать консольные приложения в схеме?
- 21. Можно ли написать PHP в jade/pug?
- 22. Можно ли написать nginx-модули в java?
- 23. Можно ли написать универсальный мультиплексор в Java?
- 24. Можно ли написать xml в json-объект?
- 25. Можно ли написать инструкцию update в linq?
- 26. Можно ли написать HTML-код в JavaScript?
- 27. Можно ли написать метод swap в Java?
- 28. Можно ли написать гибкий Pimpl в C++?
- 29. Можно ли написать cronjob в оболочке?
- 30. Можно ли написать в std :: string?
Для какой операционной системы? Python должен будет работать с сетевым стекем ядра. – mcandre
Он не уточнил, так что давайте ответьте да;) – Konerak
Зачем вам это нужно? вы знаете, что у вас есть слой ** C ** между python и фактическими сетевыми вызовами на машине (сборка) –