Может ли .NET получать SYN_ACK от Linux TCP Raw Socket? - PullRequest
1 голос
/ 09 ноября 2011

Я пытался сделать клиент в .NET, который асинхронно подключается к серверу Linux.Я использую метод BeginConnect для сокетов, которые я создал в C #, и я намерен ждать SYN_ACK от сервера до соответствующего пакета SYN, который получил сервер.На самом деле на сервере нет открытого порта или даже прослушивателя, потому что я использую сниффер для захвата SYN-пакетов от клиента.Я делаю свой собственный пакет SYN_ACK, отправляю его снова на IP-адрес клиента и успешно передаю его клиентскому интерфейсу.Но проблема в том, что метод BeginConnect не получил SYN_ACK и сказал, что время подключения сокета истекло.Вот мой фрагмент кода:

static void ConnectCallback(IAsyncResult ar) 
{
    try
    {
       // Retrieve the socket from the state object.
       Socket client = (Socket) ar.AsyncState;

       // Complete the connection.
       client.EndConnect(ar);

       Console.WriteLine("Socket connected to {0}",
       client.RemoteEndPoint.ToString());

       // Signal that the connection has been made.
       connectDone.Set();
     }
     catch (Exception e)
     {
       //Console.WriteLine(e.ToString());
     }
}
...
Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpClient.BeginConnect("1.2.3.4", intPort[0], new AsyncCallback(ConnectCallback), tcpClient);
...