2012-05-11 18 views
8

Sto provando ad inviare un pacchetto IP usando C#.Perché non posso inviare questo pacchetto 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()); 

Il contenuto di builtPacket è mostrato di seguito. È un pacchetto IP contenente un pacchetto TCP SYN (è quello che penso di aver creato comunque).

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

l'output è:

sent 40 bytes to 192.168.0.198 

il problema è che non vedo nulla nella traccia Wireshark. È come se i dati non arrivassero abbastanza in basso nello stack per consentire a Wireshark di vederlo? Se utilizzo un browser per connettersi a 192.168.0.198, Wireshark mostra tutti i pacchetti, ma non mostra nulla quando provo a inviare un pacchetto usando il codice e i dati sopra indicati.

mio config:

  • Sono in esecuzione come amministratore, quindi non è un problema di permessi.

  • Windows7 (non in esecuzione in una VM)

  • Connessione wireless solo (IP config segnala il suo IP come 192.168.0.140)

Che cosa sto facendo di sbagliato?

Sono sicuro che Occam's Razor si applica qui, ma ho osservato questo per ore e non riesco a capire cosa c'è che non va.

+1

Avete filtri impostati in wireshark? – Default

+1

Il ricevitore riceve il pacco? –

+0

Ho provato con un filtro di "host 192.168.0.198" e nessun filtro, ma non ottengo niente dalla mia app con nessuno dei due. – TonyM

risposta

3

This question, backed up by MSDN, afferma che Windows non è più (XP SP da 2 a 7) consente la trasmissione di dati TCP utilizzando socket non elaborati.

+0

Non sto inviando alcun dato TCP solo un pacchetto TCP SYN senza payload. – TonyM

+3

IMHO TCP è TCP il contenuto non ha importanza. – rekire

+0

@rekire Questa sarebbe la mia ipotesi. – shambulator

0

La mia ipotesi è che Wireshark non stia guardando l'interfaccia di rete corretta, o che l'indirizzo IP di destinazione si risolva in qualche modo sul computer locale, nel qual caso verrà instradato all'interno del sistema operativo e sarà invisibile allo 'Squalo'.

+1

Wiresharks dice che sta guardando 192.168.0.140. Se inserisco l'indirizzo IP di destinazione in un URL del browser che si collega ad esso e si presenta su Wireshark. – TonyM

Problemi correlati