Передовые трафик от порта X к компьютеру B с помощью C # «УДП Punper Hole в брандмауэр»

Мне нужно установить TCP-соединение с компьютера вашего дома на мой офисный компьютер.

На офисе есть роутер, к которому подключены несколько компьютеров. Этот маршрутизатор имеет Интернет, поэтому все компьютеры, подключенные к тому, что маршрутизатор также имеют Интернет. В моем доме у меня есть компьютер с доступом в Интернет. Мне нужен мой офисный компьютер, чтобы действовать как сервер и мой домашний компьютер для подключения к нему. Раньше я имел возможность подключаться к переадресации портов на сервере как:

    NATUPNPLib.UPnPNATClass upnpnat;
    NATUPNPLib.IStaticPortMappingCollection mappings;

    public ServerExample()
    {
        InitializeComponent();

        upnpnat = new NATUPNPLib.UPnPNATClass();
        mappings = upnpnat.StaticPortMappingCollection;

        //                           server local IP address
        mappings.Add(1300, "TCP", 1300, "192.168.150.146", true, "plsease work");
        // this code tels the router to forward all tcp traffic comming from port
        // 1300 to the server computer (it's lan ip address happens to be 192.168.150.146)
        //...

, и я смог подключиться из моего дома. (Я знаю, что простым способом будет открывать порты на офисном маршрутизаторе и переслать их на мой компьютер, проблема в том, что у меня нет доступа к офисному маршрутизатору)

Теперь они заменили маршрутизатор в мой офис с помощью Новее, и я не могу использовать свой код. Теперь, с новым маршрутизатором, когда я выполняю собственный код, который я получаю:

enter image description here

Обратите внимание, что отображения возвращаются NULL; Поэтому я не могу добавить сопоставление.

Я уверен, что должен быть способ установить связь, потому что некоторые люди в офисе используют Limewire, например или бит торрент. Я думаю, что моя проблема связана с разрешениями, может быть? Как я могу решить это?


Редактировать

Итак, от исследования я обнаружил, что то, что я пытаюсь сделать, это «ударное отверстие УДП в брандмауэр». Я действительно хочу сделать это над соединением TCP. Я не знаю, что будет разницей между TCP и UPD PUCH Holing .... Я имею в виду целью для того, чтобы клиент мог найти грушу без необходимости делать конфигурации на маршрутизаторе.

.

.

.

.

.

.

Обновление

Хорошо, так что я полагаю, что я пытался делать то, что вы, ребята, разместили на этот вопрос с C #: Хорошо, позвольте мне показать вам, что я сделал:

Примечание. Вам может понадобиться обратиться к этой диаграмме, чтобы понять Что я буду объяснить: enter image description here

Как вы знаете, я хочу установить соединение TCP между компьютером A и компьютером B. То, как мне удается сделать это, это делая то, что называется разветвлением TCP Punch.

Шаг 1: Первое, что я делаю, это начать слушать новые соединения на сервере S.

                   TcpListener server = new TcpListener(System.Net.IPAddress.Parse(“192.168.11.109”), 55550);
                   Server.Start();

                   var client = server.AcceptSocket();  \\ wait here until someone connects

Шаг 2: Теперь подключитесь к серверу с помощью компьютера A AS:

          TcpClient tcpClient = new TcpClient("192.168.11.109", 55550);

Шаг 3: После выполнения шага 2 кода на компьютере отладки сервера должны выглядеть как:

enter image description here

Шаг 4: Теперь наша цель состоит в том, чтобы подключиться к компьютеру B к компьютеру A. Server S имеет информацию, необходимую B, чтобы установить соединение. На самом деле мне придется установить связь между компьютером B и Server S, чтобы Server S может дать B соответствующие параметры, чтобы B для подключения к A.

Шаг 5: Поскольку я отладку, я могу видеть параметры, поэтому я сделаю компьютер сервером сейчас, слушая порта 3313. Я хочу, чтобы компьютер был слушать сейчас на этом порту (3313), потому что все пакеты отправляются на маршрутизатор X с портом 3313 следует отправлять на компьютер A.

       \\ COMPUTER A 
       TcpListener server = new TcpListener(System.Net.IPAddress.Parse("192.168.0.120"), 3313);
        server.Start();

        var newClient = server.AcceptSocket();  \\ wait here until a client gets connected

Шаг 6: Таким образом, компьютер A должен слушать новые соединения на порту 3313. Опять же Port 3313 важен, потому что маршрутизатор X должен пересылать все пакеты, полученные из этого порта к компьютеру A.

Компьютер A ждет новых соединений. enter image description here

Шаг 7: Так что теперь быстро! Мы хотим установить, что соединение с компьютера B. на сервере Reality S передаст параметры, но так как я просто пытаюсь сделать эту работу, я напишу программу действительно быстро на компьютере B.

          TcpClient tcpClient = new TcpClient(“192.168.11.108”, 3313);
           \\192.168.11.108  is the address of router X

Наконец:

по какой-то причине Компьютер B не способен подключаться к компьютеру A.

enter image description here

Причина, по которой он не может подключиться, это потому, что маршрутизатор X не пересылал пакеты на компьютер A. (я знаю это, потому что я включил переадресацию порту на порт 54540 На маршрутизате x и когда я использую этот порт, он работает), я имею в виду, я не понимаю, почему маршрутизатор X не пересылал трафик, поступающий из порта 3313 на компьютер A. Компьютер A уже установил соединение с сервером S и все вещи, которые сервера Отправлено на маршрутизатор X через порт 3313 отправлен на компьютер A. Почему, если я отправлю пакеты на маршрутизатор X через порт 3313, они не получают компьютер A!?

PS:

Обратите внимание, что все, что я здесь показал, у меня на самом деле есть три маршрутизатора X, Y и Z, а также у меня есть сервер S, компьютер A и компьютер B:

enter image description here

8
задан Tono Nam 5 September 2011 в 19:27
поделиться