Реализация стека TCP Python
есть ли библиотека python, которая реализует автономный стек TCP?
Я не могу использовать обычную библиотеку сокетов python, потому что я получаю поток пакетов через сокет (они туннелируются ко мне через этот сокет). Когда я получаю пакет TCP SYN, адресованный определенному порту, я хотел бы принять соединение (отправить syn-ack), а затем получить данные, отправленные другим концом (ack'ING соответствующим образом).
Я надеялся, что есть какой-то стек TCP уже написано, что я мог бы использовать. Есть идеи? Я использовал lwip в прошлом для проекта C - что-то в этом роде в python было бы идеально.
5 ответов
вы не говорите, на какой платформе вы работаете, но если вы работаете в linux, я бы открыл интерфейс tun / tap и получить IP-пакеты обратно в ядро в качестве реального сетевого интерфейса, чтобы ядро могло делать все эти хитрые вещи TCP.
вот как (например) OpenVPN работает-он получает необработанные IP-пакеты через UDP или TCP и туннелирует их обратно в ядро через интерфейс tun/tap.
Я думаю, что есть tun / tap интерфейс для windows тоже теперь, который был разработан для порта OpenVPN для windows.
полистал Scapy, похоже, что он может справиться с этими ситуациями низкого уровня. Я не использовал его сам, поэтому не могу подтвердить, что он делает то, что вы объяснили; я только просмотрел документацию.
Я знаю, что это напрямую не связано с Python, но если вы хотите сделать тяжелую сетевую обработку, вы должны рассмотреть Erlang вместо Python. Просто предложение... вы всегда можете сделать снимок, делая это с Twisted... если вы чувствуете себя предприимчивым (и у вас много времени на вашей стороне); -)
вы могли бы использовать ctypes модуль для импорта lwip и использовать его снова.
Если вы уже привержены программному обеспечению на другом конце сокета, то есть пересылке TCP-пакетов к вам, то, возможно, TCPWatch покажет вам, как добраться до пакетов SYN. SCAPY, безусловно, отлично подходит для отправки именно тех пакетов, которые вы хотите, но я не уверен, что он будет работать как прокси.
http://hathawaymix.org/Software/TCPWatch
однако, если вы не привержены тому, что находится на отправляющей стороне, рассмотрите возможность использования Twisted Conch или Paramiko для пересылки SSH. Даже если вам не нужно шифрование, вы все равно можете использовать их с blowfish, который имеет низкое влияние на ваш процессор. Это не означает, что вам нужна раковина на другом конце, так как SSH стандартизирован, поэтому любое программное обеспечение SSH должно работать. В мире SSH это обычно называют "переадресацией портов", и люди используют клиент терминала SSH для входа в сервер SSH и настройки туннеля переадресации портов. Conch и Paramiko позволяют вам построить это в Python применение так, что не будет никакой потребности для клиента терминала SSH.