Пробивка отверстий NAT - PullRequest
       128

Пробивка отверстий NAT

0 голосов
/ 07 августа 2020

Я пытаюсь реализовать пробивку отверстий NAT в python

У меня есть

Клиент: хост за NAT, может пинговать сервер

Сервер: хост за отдельный NAT

Клиент и сервер находятся в разных сетях и не могут общаться друг с другом. Клиент знает адрес сервера. Сервер не знает адрес клиента, но прослушивает сокет для пакетов ICMP в случае, если клиент обращается.

Я использую scapy.

Сервер отправляет эхо-запрос ICMP на адрес «3.3.3.3» вот так

   send(IP(dst="3.3.3.3") / ICMP(), verbose=0, loop=1)

У меня есть клиент, который притворяется маршрутизатором на inte rnet отправке запроса на тайм-аут на сервер, поскольку у него открыт сеанс сервера для этого пункта назначения. Обратите внимание, что он включает исходный пакет от сервера

    def _contact(broadcast_address, server_address):
        reply = IP(dst=server_address) / ICMP(type=11, code=0)
        original = IP(dst=broadcast_address, src=server_address) / ICMP(type=8, code=0)

        send(reply / original, loop=1, verbose=0)

По определению того, как работает NAT, он должен пропускать пакет от клиента обратно на сервер. Но это не так. Что я делаю не так?

...