Переадресация портов C # Raw - PullRequest
3 голосов
/ 20 февраля 2009

Я пытаюсь создать простое приложение на C #, которое выполняет переадресацию портов, и мне нужно знать, как использовать опцию сокета IP_HDRINCL, чтобы попытаться обмануть принимающую сторону, чтобы думать, что соединение действительно с источником. Любые примеры будут с благодарностью.

Ответы [ 4 ]

4 голосов
/ 22 июля 2009
sock = new Socket( AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP );
sock.Bind( new IPEndPoint( IPAddress.Parse( "10.25.2.148" ), 0 ) );
sock.SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1 );   
byte[] trueBytes = new byte[] { 1, 0, 0, 0 };
byte[] outBytes = new byte[] { 0, 0, 0, 0 };
sock.IOControl( IOControlCode.ReceiveAll, trueBytes, outBytes );
sock.BeginReceive( data, 0, data.Length, SocketFlags.None, new AsyncCallback( OnReceive ), null );

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

3 голосов
/ 17 сентября 2010

Более новые версии Windows ограничивают использование необработанных сокетов из-за того, что вредоносные программы злоупотребляют ими.

Цитируется из MSDN

в Windows 7, Windows Vista и Windows XP с Пакет обновления 2 (SP2), возможность отправлять трафик через необработанные сокеты ограничен несколькими способами:

  • Данные TCP не могут быть отправлены через необработанные сокеты.
  • UDP-дейтаграммы с неверным адресом источника не могут быть отправлены через необработанные сокеты. IP-адрес источника для любой исходящей дейтаграммы UDP должен существовать в сетевом интерфейсе, иначе датаграмма будет отброшена. Это изменение было сделано, чтобы ограничить способность вредоносного кода создавать распределенные атаки типа «отказ в обслуживании» и ограничивать возможность отправки поддельных пакетов (пакетов TCP / IP с поддельным IP-адресом источника).
  • Вызов функции связывания с необработанным сокетом для протокола IPPROTO_TCP недопустим. Примечание Функция связывания с необработанным сокетом разрешена для других протоколов (например, IPPROTO_IP, IPPROTO_UDP или IPPROTO_SCTP.

Указанные выше ограничения не применяются к Windows Server 2008 R2, Windows Server 2008, Windows Server 2003 или версиям операционной системы, предшествующим Windows XP с пакетом обновления 2 (SP2).

0 голосов
/ 17 сентября 2010

Я нашел этот сайт, но не уверен, насколько хорошо работает код: http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8h.html

0 голосов
/ 21 февраля 2009

IP_HDRINCL

. Тип сокета .NET поддерживает RAW, и SocketOptionName.HeaderIncluded для использования с Socket.SetSocketOption.

Возможно, вы захотите использовать Reflector для двойной проверки соответствия реализации .NET значениям перечисления.

...