Я пытаюсь создать простое приложение C#, которое выполняет переадресацию портов, и вам нужно знать, как использовать параметр сокета IP_HDRINCL, чтобы попытаться подделать принимающую сторону, чтобы думать, что соединение действительно относится к источнику , Будем очень благодарны за любые примеры.C# Raw Sockets Port Forwarding
ответ
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), но не отправлять его.
IP_HDRINCL
Тип сокета .NET поддерживает в RAW, и есть SocketOptionName.HeaderIncluded
для использования с Socket.SetSocketOption
.
Возможно, вы захотите использовать Reflector, чтобы дважды проверить выравнивания реализации .NET с значениями перечисления.
Я нашел этот сайт, но не уверен, насколько хорошо работает код: http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8h.html
Новых версии окон ограничивают использование сокетов из-за вредоносные программы сильно злоупотребляя их.
Цитируется 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).
Позволяет мне сэкономить время. :) –