dhcp request

Status
Nicht offen für weitere Antworten.
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
 
http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramPacket.html#DatagramPacket(byte[],%20int,%20java.net.InetAddress,%20int)
RTFM
 
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
 
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. 😉
 
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
 
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.
 
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
 
einfacher empfang eines pakets

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

oder auch vom Meister selbst
Receiving UDP Datagrams

*

Construct a DatagramSocket object on the port on which you want to listen.
*

Pass an empty DatagramPacket object to the DatagramSocket's receive() method.

public synchronized void receive(DatagramPacket dp) throws IOException

*

The calling thread blocks until a datagram is received.
*

dp is filled with the data from that datagram.
*

Use getPort() and and getAddress() to tell where the packet came from, getData() to retrieve the data, and getLength() to see how many bytes were in the data.
*

If the received packet was too long for the buffer, it's truncated to the length of the buffer.
*

Length is reset when packet is received

For example,
Code:
try {
  byte buffer = new byte[65536]; 
  DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
  DatagramSocket ds = new DatagramSocket(2134);
  ds.receive(incoming);
  byte[] data = incoming.getData();
  String s = new String(data, 0, data.getLength());
  System.out.println("Port" + incoming.getPort() + " on " 
   + incoming.getAddress() + " sent this message:");
  System.out.println(s);
}
catch (IOException e) {
  System.err.println(e);
}
http://www.cafeaulait.org/slides/sd...Part_2__Sockets__Server_Sockets__and_UDP.html
 
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
 
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.
 
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 ;-)
 
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.
 
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben