c# - reconnect_delay_max - rtsp_transport
C#Raw Sockets Port Forwarding (4)
IP_HDRINCL
El tipo de socket de .NET admite RAW, y hay SocketOptionName.HeaderIncluded
para usar con Socket.SetSocketOption
.
Es posible que desee utilizar Reflector para verificar que la implementación de .NET se alinee con los valores enum.
Intento crear una aplicación C # simple que redireccione los puertos, y necesito saber cómo usar la opción de socket IP_HDRINCL para tratar de engañar al destinatario para que piense que la conexión está realmente en la fuente. Cualquier ejemplo sería muy apreciado.
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 );
El único problema es que he podido recibir datos de un socket sin formato como este (incluido el encabezado IP) pero no enviarlo.
Encontré este sitio web, pero no estoy seguro de qué tan bien funciona el código: http://www.winsocketdotnetworkprogramming.com/clientserversocketnetworkcommunication8h.html
Las versiones más nuevas de Windows restringen el uso de sockets sin formato debido al malware que los abusa en gran medida.
Citado de MSDN
En Windows 7, Windows Vista y Windows XP con Service Pack 2 (SP2), la capacidad de enviar tráfico a través de sockets sin procesar se ha restringido de varias maneras:
- Los datos TCP no se pueden enviar a través de sockets sin procesar.
- Los datagramas UDP con una dirección de origen no válida no se pueden enviar a través de sockets sin formato. La dirección de origen de IP para cualquier datagrama UDP saliente debe existir en una interfaz de red o el datagrama se descarta. Este cambio se realizó para limitar la capacidad del código malicioso para crear ataques distribuidos de denegación de servicio y limita la capacidad de enviar paquetes falsificados (paquetes TCP / IP con una dirección IP de origen falsificada).
- No se permite una llamada a la función de enlace con un socket raw para el protocolo IPPROTO_TCP. Nota La función de vinculación con un socket raw está permitida para otros protocolos (IPPROTO_IP, IPPROTO_UDP o IPPROTO_SCTP, por ejemplo.
Estas restricciones anteriores no se aplican a Windows Server 2008 R2, Windows Server 2008, Windows Server 2003 ni a las versiones del sistema operativo anteriores a Windows XP con SP2.