Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Anmeldung am DHCP-Server (https://www.delphipraxis.net/160108-anmeldung-am-dhcp-server.html)

Pfanne 27. Apr 2011 20:48

Anmeldung am DHCP-Server
 
Hi,

ich möchte die DHCP-Anmeldeprozedur (DISCOVER, OFFER, REQUEST, ACK) mit Delphi an meinem Router Testen.

Hintergrund ist eine nicht überall (unterschiedliches DHCP-Serververhalten) funktionierende Anmeldung eines AVR Microcontrollers an meinem DHCP-Server.
Der einfachheit halber möchte die Anmeldeprozedur mit Delphi und WireShark "studieren".

Ich möchte quasi das vollständige DISCOVER-Frame selber auf die Reise schicken.
Wenn ich jetzt aber über den UDP-Socket einen Leerstring versende bastelt mir der Socket ja schon was zusammen.

Ich möchte jetzt Frame-Mitschinitte aus WireShark importieren (reine FrameDaten *.bin) und diese dann modifiziert über Delphi versenden.

Momentan lade ich den *.bin File in einen Stream und versende diesen über den UDP-Socket.
Wie gesagt ist leider der "Header?" somit doppelt.

Seht ihr auf die Schnelle eine einfache Möglichkeit BinärDaten 1:1 als DHCP-Boottrap zu versenden?

Danke für eure Unterstützung.

Klaus01 27. Apr 2011 20:54

AW: Anmeldung am DHCP-Server
 
.. selber bauen?
So richtig komplex ist das DHCP Protocol nicht.

Grüße
Klaus

Pfanne 27. Apr 2011 21:10

AW: Anmeldung am DHCP-Server
 
Hallo Klaus,

danke für den Link, es geht hier aber nicht um die Protokollstruktur sondern um den Test der verschiedenen Verhaltensweisen von DHCP-Server trotz "Normung".

Beispiel:
Ein Client sendet bei der DISCOVER-Anfrage als Source seine momentan noch statischsche IP also <> 0.0.0.0 (ja, soetwas gibt es!).

Einige DHCP-Server verwerfen die Anfrage (weil ja nicht konform, find ich auch richtig), andere senden trotz möglicher Protokollfehler ein OFFER.
Gleiches beim REQUEST......

Ich möchte nun mit einfachen Mitteln (Delphi und WireShark Mitschnitte) das Verhalten von verschiedenen DHCP-Servern "untersuchen" um ein besseres Verständnis dafür zu entwickeln.

Gruß
Pf@nne

SirTwist 28. Apr 2011 22:37

AW: Anmeldung am DHCP-Server
 
Magst Du einmal einen Wireshark-Dump eines funktionierenden und evtl. eines fehlschlagenden DHCP-Request Deines AVRs erstellen? Ein klein wenig kenn ich mich mit DHCP aus....

Macht der AVR evtl. einen Request schon mit einer IP-Adresse, die er von früher hat? Dann kommt es z.b. auf die Konfiguration des DHCP-Servers an, ob er die Anfrage bearbeitet oder ignoriert. Angenommen, der DHCPd fühlt sich für 10.8.15.0/24 zuständig, der AVR fragt aber nach, ob er 192.168.47.11 haben darf, dann wird der DHCPd die Anfrage komplett ignorieren (not authoritive). Im ISC dhcpd gibt es dazu eine Option, dass er sich definitiv für alles authoritive fühlt.

Gruß,
SirTwist

Pfanne 29. Apr 2011 10:18

AW: Anmeldung am DHCP-Server
 
Hi SirTwist,

das Problem ist mehr oder weniger schon eingekreist.
Mir geht es jetzt darum eine kleine "Simmulation" der Anmelderoutine mit Delphi zu schreiben. Ich möchte die Testpakete quasi selber verändern.....

Ich hab da noch mal zusammen gefasst, die WireShark Mitschnitte kann ich heute Abend reinstellen.

Ich habe festgestellt, dass die Anmeldeprozedur (DISCOVER, OFFER, REQUEST, ACK) an einem DHCP-Server eigentlich genormt sein sollte >RFC1541<, jedoch sich offensichtlich nicht alle Server bzw. Clients sich strikt daran halten.

Ich habe einen Client, der beim DISCOVER und beim REQUEST als SOURCE seine momentan noch statische IP sendet, als SOURCE <> 0.0.0.0, nur gibt es DHCP-Server die diese Packete (weil nicht Konform) verwerfen, andere DHCP-Server akzeptieren diese aber.

Ich möchte dieses Verhalten näher untersuchen.
Ich habe mir folgendes Überlegt:
- Mitschnitt der LAN-Kommunikation zwischen Client und DHCP-Server mit WireShark.
- Speichern eines mitgeschnittenen Frames (z.B. DISCOVER vom Client) als reine Binärdaten (*.bin)
- Laden der Binärdaten in einen Delphi-Stream
- Manipulation des geladenen Streams
- versenden dieses Streams über einen UDP-Socket

Das klappt auch so weit ganz gut.
Mein Problem ist nun, das UDPSocket.SendStream(myStream) ja schon eigenständig Protokollinformationen hinzufügt, so das dann ja der UDP-Header + meine *.bin-Daten versendet werden.

Frage: wie kann ich den "nackten" *.bin File Versenden?

Dann stellt sich noch die Frage, wie schalte ich die IP-Kontrolle der LAN-Schnittstelle ab?
Reicht es einfach alle Dieste und Protokolle zu entfernen, kann man das vieleicht eleganter ausschalten, so das man es später auf einfachem weg wieder aktivieren kann, ohne die Komplette Schnitstelle neu einzurichten.

Danke für dein Interesse......
Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt....

shmia 29. Apr 2011 11:14

AW: Anmeldung am DHCP-Server
 
Zitat:

Zitat von Pfanne (Beitrag 1097571)
Mein Problem ist nun, das UDPSocket.SendStream(myStream) ja schon eigenständig Protokollinformationen hinzufügt, so das dann ja der UDP-Header + meine *.bin-Daten versendet werden.

Was du suchst sind Raw-Sockets.
Das ist im Prinzip nur ein Flag, dass dem WinSock-Stack sagt, dass der Header weggelassen werden soll.
Leider hat Microsoft die Erzeugung von Raw-Sockets auf Windows XP/Vista/7 unterbunden.
Nur auf einem Server-OS können IHMO noch Raw-Sockets erstellt werden.

wicht 29. Apr 2011 11:21

AW: Anmeldung am DHCP-Server
 
Laut MSDN kann man Raw-Sockets schon erstellen, allerdings benötigt der Prozess dafür Administrator-Rechte.

shmia 29. Apr 2011 12:18

AW: Anmeldung am DHCP-Server
 
Zitat:

Zitat von wicht (Beitrag 1097581)
Laut MSDN kann man Raw-Sockets schon erstellen, allerdings benötigt der Prozess dafür Administrator-Rechte.

Microsoft hat dies aber zusätzlich eingeschränkt...

Limitations on Raw Sockets
On Windows 7, Windows Vista, Windows XP with Service Pack 2 (SP2), and Windows XP with Service Pack 3 (SP3), the ability to send traffic over raw sockets has been restricted in several ways:

* TCP data cannot be sent over raw sockets.
* UDP datagrams with an invalid source address cannot be sent over raw sockets. The IP source address for any outgoing UDP datagram must exist on a network interface or the datagram is dropped. This change was made to limit the ability of malicious code to create distributed denial-of-service attacks and limits the ability to send spoofed packets (TCP/IP packets with a forged source IP address).
* A call to the bind function with a raw socket for the IPPROTO_TCP protocol is not allowed.

Pfanne 29. Apr 2011 12:36

AW: Anmeldung am DHCP-Server
 
Na prima,

dann brauch ich ja garnicht weiter zu schauen.....

Zitat:

The IP source address for any outgoing UDP datagram must exist on a network interface or the datagram is dropped
Das ist ja genau das, was ich testen möchte SOURCE = 0.0.0.0 :?

Heißt das den nicht aber auch, dass eine DHCP Anmedung nur von WIN selber vorgenommen werden kann?


Erst mal Danke für eure Hilfe, auch wenn es nicht so klappt wie ich es mir vorgestellt habe.

Gruß
Pf@nne

shmia 29. Apr 2011 12:42

AW: Anmeldung am DHCP-Server
 
Zitat:

Zitat von Pfanne (Beitrag 1097613)
dann brauch ich ja garnicht weiter zu schauen.....

Naja, wenn du herausfinden würdest, wie man die Begrenzung umgehen kann (geheimer Registry key oder ein Systemtreiber der den Riegel wieder aufmacht) dann würde es gehen. Und ich wäre auch an der Lösung interessiert :-D
Zitat:

Heißt das den nicht aber auch, dass eine DHCP Anmedung nur von WIN selber vorgenommen werden kann?
Ja!
Ausser du würdest z.B. einen Windows 2003/2008 SERVER benützen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz