Как мне сделать дырокол TCP?

Вопрос ниже. Вот мой текущий тестовый код, который не удался.

static void Main(string[] args)
{
    if (args.Count() != 3)
    {
        Console.WriteLine("Bad args");
    }
    var ep = new IPEndPoint(IPAddress.Parse(args[0]), int.Parse(args[1]));
    var lp = new IPEndPoint(IPAddress.Any, int.Parse(args[2]));

    var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    s.Bind(lp);

    var c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    c.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    c.Bind(lp);

    Task.Run(() => { try { c.Connect(ep); } catch { } });
    s.Listen(10);
    var v = s.Accept();
    v.Close();
}

Как мне сделать дырокол TCP? Я тестирую с использованием удаленного сервера. я бегуwget local_public_ip:port/test, У меня настроен маршрутизатор для порта 80, поэтому он не требует дырокола. Мой код получил соединение. Сейчас я пробую другие порты и не могу точно понять, как пробить дыру.

Что я сделал, это (код C #)

var l = new TcpListener(8090);
l.Start();
try { var o = new TcpClient(); o.Connect("myserverip", 123); }
catch(Exception ex) {}
var e = l.AcceptSocket();
Console.WriteLine(e.RemoteEndPoint.AddressFamily);

Я подумал, что, возможно, мне нужно настроить локальную конечную точку на выходном TCP-соединении.

TcpClient(new System.Net.IPEndPoint(new System.Net.IPAddress(bytearray), port));

Я сделал ошибку и получил это исключение

The requested address is not valid in its context

Исправление байтового массива до192,168,1,5 кажется, что исходящие соединения правильно соединяются. Теперь, когда у меня есть выходное соединение с удаленным IP-адресом через порт прослушивания, я подумал, что wget сможет подключиться ко мне. Это был не тот случай

Как мне сделать дырокол TCP?

Ответы на вопрос(1)

Ваш ответ на вопрос