# dhcp request



## christophersn (15. Dez 2004)

Hi, 
wie kann ich in Java möglichst einfach und unkompliziert, was soviel heißen soll wie "möglichst kurz!", einen DHCP-Server kontaktieren? Letzten Endes soll es lediglich darum gehen, die Funktionstüchtigkeit dieses Servers zu überprüfen, quasi eine Art Socket zu diesem herzustellen. Da DHCP aber UDP verwendet, ist diese Variante leider nicht möglich! Was habt Ihr da für Ideen, diesen Serverdienst über Port 67 anzusprechen?
THX


----------



## foobar (15. Dez 2004)

Guckst du hier http://www.javaalmanac.com/egs/java.net/SendDatagram.html


----------



## christophersn (16. Dez 2004)

noch eine Frage aber bleibt offen: 
woraus setzen sich "outbuf, len" zusammen!!!
Bitte Erklärung an einem BSP!!
thx


----------



## foobar (16. Dez 2004)

http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramPacket.html#DatagramPacket(byte[],%20int,%20java.net.InetAddress,%20int)
RTFM


----------



## Gast (17. Dez 2004)

was bist denn du für ein schlaumeier?! - entschuldige meinen Ausdruck, aber hast Du Dir die Java-Doku zu dieser Klasse schon selbst angesehen? Da steht nämlich nichts über den genauen Aufbau von "outbuf bzw. len" drinnen! Was nützt mir die Klasse mit seinen Konstruktoren, Methoden etc. wenn ich an einem ganz anderen Problem scheitere?
Was ich wissen will ist, was z.B. "outbuf" für eine Größe (Arraylänge) sein muss, bzw. woraus sich "len" zusammensetzt -> kann ja nicht beliebige Werte annehmen, so quasi "probier einmal" ...
Danke an alle die darüber etwas mehr wissen.
lg


----------



## christophersn (17. Dez 2004)

... der Gast war übrigens ich ...


----------



## Grizzly (17. Dez 2004)

JavaDoc hat gesagt.:
			
		

> public DatagramPacket(byte[] buf, int length, InetAddress address, int port)
> Constructs a datagram packet for sending packets of length _length_ to the specified port number on the specified host. The length argument must be less than or equal to _buf.length_.



Im Array _buf_ stehen die Daten, die Du versenden möchtest. In _length_ steht die Länge bzw. Anzahl der Daten, die vom Array _buf_ übermittelt werden sollen. Dabei darf _length_ natürlich nur <= _buf.length_ sein. Denn: Ich kann ja nicht mehr Daten versenden, als ich habe - weniger allerdings schon.

Hab' ich damit Deine Frage beantwortet? Ansonsten musst Du sie halt nochmal posten und etwas umformulieren.


----------



## christophersn (17. Dez 2004)

Hi Grizzly,
da wird die ganze Angelegenheit schon etwas klarer! ;-)
Was mich dann noch interessiert ist, wie es Du anstellen würdest, einen DHCP-Server auf Funktion zu überprüfen. Da DHCP ja auf UDP basiert nützt es mir wenig, dem Server Daten zu schicken wenn ich nicht weiß ob sie ankommen - oder hast Du eine Ahnung wie eben ein Request in DHCP aussehen muss, was will der für Daten für eine Rückmeldung? Oder bekomme ich ohnehin was rein wenn ich auf dem Port des Servers "horche"? 
Wie Du siehst will ich lediglich ein Lebenszeichen eines DHCP-Servers mit bekannten IP u Port! wie stell ich das am besten an?
Thx
Chris


----------



## Grizzly (17. Dez 2004)

UDP bekommt von Haus aus keine Rückmeldung. Das ist ja der Witz an dem Protokoll bzw. Sub-Protokoll vom IP-Protokoll.

Wie Du ein Lebenszeichen bekommst? Sicher gibt es eine Möglichkeit einfach den Status des DHCP Servers abzufragen. Dazu musst Du Dir halt mal das entsprechende RFC durchlesen.

Bei DHCP selber kann ich Dir leider nicht weiterhelfen, da ich mich damit noch nicht beschäftigt habe.


----------



## Bleiglanz (17. Dez 2004)

hä? mach halt einen ServerSocket auf, der auf die vom DHCP gesendet UDPs wartet


----------



## christophersn (17. Dez 2004)

und wie kann ich den DHCP dazu auffordern, mir etwas zu senden? genau das ist ja das Problem, dass ich noch nicht genau weiß, wie ich den dazu bringe! die RFC hab ich schon vorbereitet, wenns nicht anders geht muss ich wohl aus der schlau werden.

einen gewöhnlichen ServerSocket kann ich hierfür doch nicht verwenden, eben wegen UDP!... oder hab ich da was missverstanden? 

oder Bleiglanz zeigt mir eine Variante, da wär ich schon mal froh drüber!

THX
Chris


----------



## Bleiglanz (18. Dez 2004)

einfacher empfang eines pakets

http://people.westminstercollege.edu/faculty/ggagne/sigcse2003/UDP/UDPDiscardServer.java

oder auch vom Meister selbst


> Receiving UDP Datagrams
> 
> *
> 
> ...


http://www.cafeaulait.org/slides/sd...Part_2__Sockets__Server_Sockets__and_UDP.html


----------



## Bleiglanz (18. Dez 2004)

dann brauchst dur nur noch den inhalt auslesen

1	8 Bit		Operation
2	8 Bit		Hardware
3	8 Bit		Länge der Hardwareadresse
4	8 Bit		Hops
5	32 Bit		Transaktionsnummer
6	16 Bit		Sekunden des Bootvorgangs
7	16 Bit		Flags
8	32 Bit		IP Adresse des Clients
9	32 Bit		Zugeteilte IP Adresse
10	32 Bit		IP Adresse des Servers
11	32 Bit		IP Adresse des Routers
12	128 Bit		Hardwareadresse des Clients
13	512 Bit		Hostaname des Servers
14	1024 Bit	Dateiname
15	n Bit		Option


----------



## foobar (18. Dez 2004)

> was bist denn du für ein schlaumeier?!





> Parameters:
> buf - the packet data.
> length - the packet length.
> address - the destination address.
> port - the destination port number.


Quelle: http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramPacket.html#DatagramPacket(byte[],%20int,%20java.net.InetAddress,%20int) 

Wer lesen kann, ist klar im Vorteil.


----------



## christophersn (18. Dez 2004)

ich weiß nicht @footbar, irgendwie werde ich aus Dir einfach nicht recht schlau! zum Glück aber hab ich ja jetzt eine Richtung für mein Problem, dagegen bleibt das Problem Deines Links immer noch bestehen: Aus der Java-Klassenbibliothe allein bekomm ich garnichts raus, ich finde da sollte man zumindest Wissen, wie das annähernd funktioniert, sonst bleibt man auf der Strecke! --> zumindest hab ich aber jetzt mal nen Schimmer ...

Thx @ll die sich die Mühe mal gemacht haben, mir zu helfen -> bin allerdings für weitere Tipps immer offen ;-)


----------



## Grizzly (19. Dez 2004)

christophersn hat gesagt.:
			
		

> ich weiß nicht @footbar, irgendwie werde ich aus Dir einfach nicht recht schlau! zum Glück aber hab ich ja jetzt eine Richtung für mein Problem, dagegen bleibt das Problem Deines Links immer noch bestehen: Aus der Java-Klassenbibliothe allein bekomm ich garnichts raus, ich finde da sollte man zumindest Wissen, wie das annähernd funktioniert, sonst bleibt man auf der Strecke! --> zumindest hab ich aber jetzt mal nen Schimmer ...



Ähm, zur Verteidung von foobar muss ich sagen, dass ich in meinem Post eigentlich auch nix anderes gemacht habe, als die API ins Deutsche zu übersetzen  . Und Englisch sollte man beim Programmieren schon verstehen können  .

Ansonsten würde ich Dir das OpenBook Java ist auch eine Insel von Galileo Computing an's Herz legen. Da findest Du zu vielen Themen eine praktische Einführung. Ansonsten bietet Sun selber auch jede Menge Tutorials zu fast allen Themen an.


----------



## Gast (20. Dez 2004)

oh Grizzly, entschuldigung die Annahme dass Dein Beitrag hilfreich war ...
Ich versteh einfach die Typen nicht, die nicht zum eigentlichen Thema antworten können ... ich denke, mehr muss man nicht sagen.


----------

