2012-05-11 13 views
8

Estoy tratando de enviar un paquete de IP usando C#.¿Por qué no puedo enviar este paquete de IP?

destAddress = IPAddress.Parse("192.168.0.198"), 
    destPort = 80; 

    // Create a raw socket to send this packet 
    rawSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 

    // Bind the socket to the interface specified 
    IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.0.140"),0); 
    rawSocket.Bind(iep); 

    // Set the HeaderIncluded option since we include the IP header 
    rawSocket.SetSocketOption(socketLevel, SocketOptionName.HeaderIncluded, 1); 

    // Send the packet! 
    int rc = rawSocket.SendTo(builtPacket, new IPEndPoint(destAddress, destPort)); 
    Console.WriteLine("sent {0} bytes to {1}", rc, destAddress.ToString()); 

El contenido de builtPacket se muestra a continuación. Es un paquete IP que contiene un paquete TCP SYN (Eso es lo que creo que creé de todos modos).

45 00 00 28 00 00 00 00 02 06 36 6E C0 A8 00 8C

C0 A8 00 C6 14 1E 00 50 00 00 00 00 00 00 00 00

05 02 FF FF E6 4F 00 00

la salida es:

sent 40 bytes to 192.168.0.198 

el problema es que no se ve nada en la traza de Wireshark. Es como si los datos no estuvieran lo suficientemente lejos en la pila para que Wireshark lo viera? Si uso un navegador para conectarme a 192.168.0.198, Wireshark muestra todos los paquetes, pero no muestra nada cuando intento enviar un paquete usando el código y los datos anteriores.

Mi config:

  • Me postulo como admin así que no es un problema de permisos.

  • Windows 7 (no se ejecuta en una máquina virtual)

  • Sólo en conexión inalámbrica (IP config informan sobre su IP 192.168.0.140)

¿Qué estoy haciendo mal?

Estoy seguro de que la Navaja de Occam se aplica aquí, pero he estado mirando esto durante horas y no puedo entender lo que está mal.

+1

¿Tiene algún filtro instalado en wireshark? – Default

+1

¿El receptor recibe el paquete? –

+0

He intentado con un filtro de "host 192.168.0.198" y sin filtro, pero tampoco obtengo nada de mi aplicación. – TonyM

Respuesta

3

This question, backed up by MSDN, afirma que Windows ya no (XP SP 2 a 7) permite la transmisión de datos TCP utilizando sockets sin formato.

+0

No estoy enviando datos TCP solo un paquete TCP SYN sin carga útil. – TonyM

+3

IMHO TCP es TCP, el contenido no importa. – rekire

+0

@rekire Esa sería mi suposición también. – shambulator

0

Supongo que Wireshark no está mirando a la interfaz de red correcta o que la dirección IP de destino se resuelve de algún modo en la máquina local, en cuyo caso se enrutará dentro del sistema operativo y será invisible para el 'Shark.

+1

Wiresharks dice que está mirando 192.168.0.140. Si pongo la dirección IP de destino en la URL de un navegador, se conecta a ella y aparece en Wireshark. – TonyM

Cuestiones relacionadas