Entwickler-Ecke
Internet / Netzwerk - IP-Paket nativ verschicken
Moritz M. - Di 05.04.05 16:23
Titel: IP-Paket nativ verschicken
Hi Leute,
kennt jemand von euch eine Möglichkeit, ein IP-Paket selbst zu "konstruieren", dieses dann zu verschicken und die Antwort ebenso wieder auswerten?
Gruß, Moritz
opfer.der.genauigkeit - Di 05.04.05 16:32
Nein, du kannst den IP- Header in seinem Aufbau nicht so verändern, dass er noch für andere lesbar ist.
D.h. das IP- Paket würde nie ankommen.
Mußt dich eben an Definition halten.
http://en.wikipedia.org/wiki/IPv4
Allderdings, kannst du die Werte nach belieben modifizeren.
//Edit: oder meinst du den definierten Aufbau, nach IEEE, selbst vorzunehmen?
Wenn ja, kannst du das gerne machen.. "wie" bleibt dir ja überlassen, mußen ja nur die
Bytes übereinstimmen und die Werte korrekt sein.
Schicken kannst du das dann *überleg* ich glaube nur per RAW- Socket.
Moritz M. - Di 05.04.05 16:37
Hallo,
ja, ich wollte es nach der ich RFC definierten Struktur aufbauen, das ist dann ja nicht's weiter als ein Record. Ich weiß nur nicht, mit welcher Funktion ich es versenden bzw. das komplette Antwortpaket empfangen kann.
Ich muss auf Felder aus dem Feld zugreifen.
Gruß
opfer.der.genauigkeit - Di 05.04.05 16:48
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/binding_a_socket.asp
Normalerweise kannst du das über Socket problemlos machen.
Mußt den Protokolltypen nur angeben. Ob es einen Protokolltypen gibt, der
nur IP anbietet, weiß ich nicht, aber ich vermute schon.
Schau mal bei "Creating a Socket" oder "Binding a Socket".
Ansonsten wie gesagt über RAW- Sockets.
Wenn allerdings Sockets automatisch diesen Protokolltypen unterstützen, kannste sicherlich
auf die Klasse TCustomSocket oder so zugreifen.
Moritz M. - Di 05.04.05 17:02
Okay, Danke, ich werd mich mal ein wenig in die MSDN einlesen. Es ist halt wirklich wichtig, dass ich auf die einzelnen Felder zugrifen kann.
opfer.der.genauigkeit - Di 05.04.05 17:06
Kleiner Tip am Rande, die "IP Helpers" sind Gold wert.
Moritz M. - Di 05.04.05 19:08
Hallo,
soweit bin ich jetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| var lwsaData: WSADATA; lsocket: TSOCKET; clientService: sockaddr_in; bytesSent: Integer; bytesRecv: Integer; sendbuf: Array[0..31] of Char; recvbuf: Array[0..31] of Char; begin if WSAStartup(MAKEWORD(2,2), lwsaData) <> NO_ERROR then Exit;
lsocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if lsocket = INVALID_SOCKET then Exit;
clientService.sin_family := AF_INET; clientService.sin_addr.s_addr := inet_addr('128.30.52.24'); clientService.sin_port := htons(80); if connect(lsocket, TSockAddr(clientService), sizeof(clientService)) = SOCKET_ERROR then ShowMessage('N');
sendbuf := 'GET / HTTP/1.1'+#13#10+'Host: w3c.org'; bytesRecv := SOCKET_ERROR; bytesSent := send(lsocket, sendbuf, strlen(sendbuf), 0); ShowMessage(IntToStr(bytesSent) + ' bytes sent out there');
while bytesRecv = SOCKET_ERROR do begin ShowMessage(IntToStr(bytesRecv)); bytesRecv := recv(lSocket, recvbuf, 32, 0); ShowMessage(IntToStr(bytesRecv)); if (bytesRecv = 0) or (bytesRecv = WSAECONNRESET) then ShowMessage('closed'); Application.ProcessMessages; end;
WSACleanup();
ShowMessage('j'); |
Der Code funktionier zwar noch nicht ganz (bei recv bleibt er hängen), allerdings erhalte ich damit nicht den IP Header - Und das ist der, den ich brauche. Genauso wenig erhalte ich ihn mit Ip Helpers. Gibt es noch eine alternative Möglichkeit?
Bzw. sieht jemand den Fehler im Code? (Bitte verzeiht mir die ShowMessages, die sind zum debuggen drin. Die Implementierung ist genau nach der MSN gemacht)
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!