In Router einloggen und PCs im Netzwerk erkennen

moccajoghurt

Bekanntes Mitglied
Hi,
will jetzt mein erstes sinnvolles Programm schreiben.
Folgendes soll es tun:
Wenn ich es starte soll es die Router-Adresse aufrufen, sich einloggen und auf der Startseite des Routers in der Kategorie "Netzwerk" auslesen wieviele PCs momentan mit dem Router verbunden sind und die jeweiligen Computernamen ausgeben.

Welche Klassen sind dafür geeignet? Wie würdet ihr ungefähr vorgehen?

Gruß,

mocca
 
Zuletzt bearbeitet:
G

gman

Gast
Da der Router wahrscheinlich wie alle anderen auch über ein Web-Interface bedient wird, könntest du
mit Java eine solche Bedienung nachahmen. Z.B. mit HtmlUnit. Eigentlich ist das eher gedacht um
Webseiten zu testen.
 

moccajoghurt

Bekanntes Mitglied
Danke erstmal für den link, ich denke das ist genau das richtige. Leider habe ich Probleme die nötigen Klassen in meinen workspace (ich benutze Eclipse) zu kopieren. Wohin muss ich die Jar Dateien (im lib Ordner) kopieren und wohin kommt der apidocs Ordner? Bin etwas überfordert... hat jemand Erfahrung mit HtmlUnit und kann mir ein wenig unter die Arme greifen?
 

XHelp

Top Contributor
Hat eher weniger mit speziell HtmlUnit zu tun. Googlesuche nach "eclipse add library" liefert bestimmt die passende Lösung.

Wenn du aber gerade erst anfängst, würde ich nicht auf ein Haufen Frameworks zugreifen, versuch es lieber mit Standardmitteln umzusetzen. So wirst du imho mehr lernen. Kenne zwar deinen Router nicht, aber ich denke Google verrät dir unter "java send POST request" das wichtigste, was du dafür brauchst.
 
G

Gastredner

Gast
Und wenn du doch eine Bibliothek benötigst:
Erstelle dir in deinem Projekt am Besten einen Ordner namens "lib" und kopiere das .jar einach hinein. Anschließend Rechtsklick und im Kontextmenü unter Build Path auf "Add to Build Path" klicken. Die Bibliothek taucht nun unter unter einem Menüpunkt namens "Referenced Libraries" auf. Willst dann noch den Source-Code oder Javadoc hinzufügen, so kannst du dies über den Properties der Bibliothek (Rechtsklick -> Properties).
Beim Export als Runnable Jar bietet dir Eclipse zudem die Möglichkeit, verwendete Bibliotheken direkt mit in dein .jar zu packen.
 

timbeau

Gesperrter Benutzer
Und wenn mans ganz bequem haben will und noch für die Zukunft lernen kann man sich mal Maven2 anschauen. Da kannst du die libs ganz einfach in einem Online-Repository suchen und der packt sie dir an die richtige Stelle. Mit allen Abhängigkeiten.

Für eclipse:

Installing m2eclipse | Sonatype
 

moccajoghurt

Bekanntes Mitglied
Also ich hab mich dafür entschieden das Programm mit Standardmitteln umzusetzen, damit ich mehr lerne. Habe mir die das Klassenarchiv java.net.*; angeschaut und stelle fest, dass das Programm nicht auf das Inet zugreifen kann, weil es den Zugang zum Internet nicht findet... also muss ich wohl die Proxyeinstellungen in Java festlegen... weiß leider nicht wie das gehen soll. Habe folgendes Programm geschrieben um mich mit java.net.*; vertraut zu machen:

Java:
import java.net.*;
import java.io.*;

public class Router {
    public static void main(String[] args) throws Exception {

        URL router = new URL("http://fritz.box");
        BufferedReader in = new BufferedReader(new InputStreamReader(
                router.openStream()));

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
            in.close();
        }
    }
}
 

moccajoghurt

Bekanntes Mitglied
ok mein prog war fehlerhaft, hab den fehler gefunden, hat nix mit proxyeinstellungen zu tun^^
sorry nächstes mal schau ich genauer
 
Zuletzt bearbeitet:

moccajoghurt

Bekanntes Mitglied
Ich versuche gerade herauszufinden wie ich das Passwort an den Router übermittle, weil die Passwortübergabe am Router über in javascript geregelt ist. Wie kann mein Programm jetzt die Passwort-Daten an den Server übermitteln, damit mein Programm auf den Router zugreifen kann...? Hier mein bisheriger Code:

Java:
import java.io.*;
import java.net.*;

public class Router1 {
    public static void main(String[] args) throws Exception {
        String passwd = "admin";

        URL router = new URL("http://fritz.box/login.lua?page=/home/home.lua");
        URLConnection rc = router.openConnection();
        rc.setDoOutput(true);

        OutputStreamWriter writer = new OutputStreamWriter(rc.getOutputStream());

        writer.write(passwd);
        writer.flush();

        BufferedReader buffer = new BufferedReader(new InputStreamReader(
                rc.getInputStream()));
        
        String inf;
        
        while ((inf = buffer.readLine()) != null) {
            System.out.println(inf);
        }
    }
}
 

moccajoghurt

Bekanntes Mitglied
ja danach habe ich gesucht und soweit ich das verstanden habe sendet man den POST request über dem OutputStreamWriter... oder sehe ich das falsch? ich kann den sourcecode vom login leider nicht soweit verstehen, dass ich den richtigen POST request senden könnte...
hier mal das javascript, dass den login regelt:
HTML:
<script type="text/javascript" src="/js/md5.js"></script>
<script type="text/javascript">
var challenge = "f56c6b05";
function makeDots(str) {
var newStr = "";
for (var i = 0, len = str.length; i < len; i++) {
if (str.charCodeAt(i) > 255) newStr += ".";
else newStr += str.charAt(i);
}
return newStr;
}
function uiDoOnMainFormSubmit()
{
var resp = challenge + "-" + makeDots(jxl.getValue("uiPass"));
jxl.setValue("uiResp", challenge + "-" + hex_md5(resp));
jxl.disable("uiPass");
jxl.disable("uiSubmitLogin");
jxl.setStyle("uiMainForm", "cursor", "wait");
return true;
}
function getWaitStr(mSec)
{
var sec = Math.ceil(mSec/1000);
if (sec === 1) {
return "Bitte warten Sie 1 Sekunde.";
}
else {
return "Bitte warten Sie %1 Sekunden.".replace(/%1/,sec);
}
}
function doBlockLogin(time)
{
jxl.disable("uiPass");
jxl.disable("uiSubmitLogin");
var start = (new Date()).getTime();
var timer = timer || null;
if (timer) {
window.clearTimeout(timer);
timer = null;
}
function f () {
var now = (new Date()).getTime();
var wait = time - (now - start);
if (wait > 0) {
jxl.setHtml("uiWait", getWaitStr(wait));
timer = window.setTimeout(f,500);
}
else {
jxl.hide("uiWait");
jxl.enableWithFocus("uiPass");
jxl.enable("uiSubmitLogin");
}
}
f();
}
function init()
{
var form = jxl.get("uiMainForm");
if (form)
{
jxl.hide("jswarning");
jxl.enable("uiSubmitLogin");
jxl.focus("uiPass");
form.onsubmit = uiDoOnMainFormSubmit;

}
}
ready.onReady(init);
</script>
 

moccajoghurt

Bekanntes Mitglied
Ich poste mal den gesamten HTML-Quellcode. Wie sende ich dieses doofe Passwort an die richtige Stelle ;(

HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=utf-8">
<title>Willkommen bei FRITZ!Box</title>
<link rel="stylesheet" type="text/css" href="/css/default/main.css"/>
<link rel="stylesheet" type="text/css" href="/css/default/print.css" media="print"/>
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" href="/css/default/ie_fix.css"/>
<![endif]-->
<!--[if IE]>
<style type="text/css">
.hide_ftp_link {display: none;}
</style>
<![endif]-->
<script type="text/javascript" src="/js/jxl.js"></script>
<script type="text/javascript" src="/js/ready.js"></script>
<script type="text/javascript" src="/js/help.js"></script>
<script type="text/javascript" src="/js/popup.js"></script>

<script type="text/javascript" src="/js/globalonclick.js"></script>
<script type="text/javascript">
//Click Waitcourser anzeigen
//ready.onReady(globalOnClick.init);
if (window.location.search.indexOf("&popupwnd=1")!=-1) {
ready.onReady(popup.prepareHeader);
}
ready.onReady(help.show);
</script>

<script type="text/javascript" src="/js/md5.js"></script>
<script type="text/javascript">
var challenge = "e4f5fc9e";
function makeDots(str) {
var newStr = "";
for (var i = 0, len = str.length; i < len; i++) {
if (str.charCodeAt(i) > 255) newStr += ".";
else newStr += str.charAt(i);
}
return newStr;
}
function uiDoOnMainFormSubmit()
{
var resp = challenge + "-" + makeDots(jxl.getValue("uiPass"));
jxl.setValue("uiResp", challenge + "-" + hex_md5(resp));
jxl.disable("uiPass");
jxl.disable("uiSubmitLogin");
jxl.setStyle("uiMainForm", "cursor", "wait");
return true;
}
function getWaitStr(mSec)
{
var sec = Math.ceil(mSec/1000);
if (sec === 1) {
return "Bitte warten Sie 1 Sekunde.";
}
else {
return "Bitte warten Sie %1 Sekunden.".replace(/%1/,sec);
}
}
function doBlockLogin(time)
{
jxl.disable("uiPass");
jxl.disable("uiSubmitLogin");
var start = (new Date()).getTime();
var timer = timer || null;
if (timer) {
window.clearTimeout(timer);
timer = null;
}
function f () {
var now = (new Date()).getTime();
var wait = time - (now - start);
if (wait > 0) {
jxl.setHtml("uiWait", getWaitStr(wait));
timer = window.setTimeout(f,500);
}
else {
jxl.hide("uiWait");
jxl.enableWithFocus("uiPass");
jxl.enable("uiSubmitLogin");
}
}
f();
}
function init()
{
var form = jxl.get("uiMainForm");
if (form)
{
jxl.hide("jswarning");
jxl.enable("uiSubmitLogin");
jxl.focus("uiPass");
form.onsubmit = uiDoOnMainFormSubmit;

}
}
ready.onReady(init);
</script>
</head>
<body>
<!-- pagename:/login.lua-->
<div id="main_page_all">
<div id="intro_bar_box">
<div id="intro_bar_left">
<img src="../html/de/images/leer.gif" width="140" height="70" usemap="#logo" style="border:0px;">
<map name="logo">

<area shape="rect" coords="30,0,135,80" href="/home/home.lua?sid=0000000000000000">
</map>
</div>
<div id="intro_bar_right"></div>
<div id="intro_back">
<div id="intro_bar_middle"></div>
</div>
</div>
<div class="clear_float"></div>


<div id="page_content_no_menu_box">
<div class="blue_bar_left_edge"></div>
<div class="blue_bar_right_edge"></div>
<div class="blue_bar_back">
<h2>Willkommen bei FRITZ!Box</h2>

</div>
<div id="page_content">



<p>Die Benutzeroberfläche der FRITZ!Box ist mit einem Kennwort geschützt. Melden Sie sich mit dem Kennwort an.</p>
<form class="close" method="POST" action="/login.lua" id="uiMainForm">
<div class="formular">
<label for="uiPass">Kennwort</label>
<input type="password" id="uiPass" name="password">

<p id="jswarning">Achtung! Für die Anmeldung ist aus Sicherheitsgründen zwingend Javascript erforderlich. Bitte aktivieren Sie Javascript in den Einstellungen Ihres Browsers.</p>
</div>
<p>

Wenn Sie Ihr Kennwort vergessen haben, können Sie die FRITZ!Box auf die Werkseinstellungen <a href="/vergessen.lua">zurücksetzen</a>.
</p>

<div id="btn_form_foot">
<input type="hidden" id="uiResp" name="response">
<input type="hidden" name="get_page" value="/home/home.lua">
 
<button type="submit" id="uiSubmitLogin" disabled>Anmelden</button>
</div>
</form>
</div>
<div class="clear_float"></div>
<div class="page_bottom_container">
<div class="page_left_bottom"></div>

<div class="page_right_bottom"></div>
<div class="page_back_bottom" style="">
<div id="MainPagebottom">
</div>
</div>
</div>

<div id="foot_menu_box">

</div>

</div>
</div>

</body>
</html>
 

XHelp

Top Contributor
Auf den ersten Blick ist für dich folgendes relevant:
Code:
<form class="close" method="POST" action="/login.lua" id="uiMainForm">
<input type="password" id="uiPass" name="password">

<input type="hidden" id="uiResp" name="response">
<input type="hidden" name="get_page" value="/home/home.lua">
 
<button type="submit" id="uiSubmitLogin" disabled>Anmelden</button>
</form>
 

moccajoghurt

Bekanntes Mitglied
ok. Also was muss ich in den String schreiben, den ich als POST method versende?
Java:
String passwd = "uiPass=\"admin\"";
?

kann man das aus diesem quellcode herauslesen oder muss ich rumprobieren?
 
J

JohannisderKaeufer

Gast
Ein Tip.

Wenn du den Firefox verwendest, dann besorge dir das Plugin Firebug.
Dort gibt es einen Reiter Netzwerk, dort wird protokolliert was der Browser sendet und empfängt. Und wie die jeweiligen Header aussehen.

Hier würde ich erstmal manuell versuchen mich einzuloggen und schauen was denn da für Daten überhaupt gesendet werden.
 

moccajoghurt

Bekanntes Mitglied
Ok, danke für den Tipp. Dadurch hab ich einige Infos, jetzt muss ich nurnoch wissen, wie ich sie auswerten kann^^
firebug.png

weiß jemand welcher teil davon jetzt in den String muss? :D
 

XHelp

Top Contributor
Keiner von dennen, die auf dem Bild sind... es könnte evtl sein, dass der Router den Referer überprüft, aber ich bezweifle es stark.
Du brauchst die Daten. Wie gesagt, such nach der Post-Anfrage, da gibt es mit Sicherheit auf dem 1. Link ein Beispiel wie du Daten sendest und die Antwort bekommst.
 
H

heinzHerbert

Gast
Für dich ist folgendes aus dem Quelltext relevant:

HTML:
<script type="text/javascript">
var challenge = "e4f5fc9e";
function makeDots(str) {
var newStr = "";
for (var i = 0, len = str.length; i < len; i++) {
if (str.charCodeAt(i) > 255) newStr += ".";
else newStr += str.charAt(i);
}
return newStr;
}
function uiDoOnMainFormSubmit()
{
var resp = challenge + "-" + makeDots(jxl.getValue("uiPass"));
jxl.setValue("uiResp", challenge + "-" + hex_md5(resp));
jxl.disable("uiPass");
jxl.disable("uiSubmitLogin");
jxl.setStyle("uiMainForm", "cursor", "wait");
return true;
}

...

Wenn du dir deine beiden geposteten Quelltexte mit dem JavaScript anschaust, wirst du sehen, dass der Wert der Variable "challenge" immer verschieden ist. Du brauchst immer diesen Wert. Und dann wird, bevor der POST-Request versendet wird, noch die Funktion "uiDoOnMainFormSubmit" ausgeführt. Die setzt den Wert von einem Eingabefeld im Formular neu. Dieses Feld ist das:
HTML:
<input type="hidden" id="uiResp" name="response">

Das machen diese beiden Zeilen in der Funktion:
HTML:
var resp = challenge + "-" + makeDots(jxl.getValue("uiPass"));
jxl.setValue("uiResp", challenge + "-" + hex_md5(resp));

"makeDots" ist auch hier im JavaScript definiert. "hex_md5" nicht. Du musst den Wert des Formular-Feldes auf die selbe Weise bestimmen.

Und dann kannst du alles, was in diesem Formular steht (inkl. des für "uiResp" berechneten Wertes) in deinen POST-Request einpacken und das ganze abschicken:

HTML:
<form class="close" method="POST" action="/login.lua" id="uiMainForm">
<input type="password" id="uiPass" name="password">

<input type="hidden" id="uiResp" name="response">
<input type="hidden" name="get_page" value="/home/home.lua">
 
<button type="submit" id="uiSubmitLogin" disabled>Anmelden</button>
</form>
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N PC am Router über "shutdown" herunterfahren Java Basics - Anfänger-Themen 2
G Router IpAdresse Java Basics - Anfänger-Themen 5
E Auf PCs am Router zugreifen? Java Basics - Anfänger-Themen 3
K Router über Netzwerk Booten lassen Java Basics - Anfänger-Themen 8
K einstellungen am Router vornehmen Java Basics - Anfänger-Themen 11
E PCs am Router herunterfahren Java Basics - Anfänger-Themen 3
K Java installieren - WLAN Router Java Basics - Anfänger-Themen 3
F jsoup einloggen klappt nicht Java Basics - Anfänger-Themen 10
B Mit Java in Webpage Einloggen und Daten auslesen? Java Basics - Anfänger-Themen 4
X Via Java auf eine Webseite einloggen. Java Basics - Anfänger-Themen 6
G Einloggen überprüfen Java Basics - Anfänger-Themen 10
C Einloggen auch per ENTER Taste (KeyListener Problem) Java Basics - Anfänger-Themen 8
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
T Access mit Java verbinden im netzwerk Java Basics - Anfänger-Themen 3
S Input/Output Vom Netzwerk kopieren Java Basics - Anfänger-Themen 6
B Unique ID für Device im internen Netzwerk Java Basics - Anfänger-Themen 19
M Neuronales Netzwerk Java Basics - Anfänger-Themen 3
fLooojava Daten im selben Netzwerk an IP Java Basics - Anfänger-Themen 1
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
H Entwicklung am selben Projekt im Netzwerk Java Basics - Anfänger-Themen 9
T Erkennen ob ein Pfad lokal oder im Netzwerk ist Java Basics - Anfänger-Themen 13
B Erste Schritte Dateien ueber Netzwerk kopieren Java Basics - Anfänger-Themen 2
P Probleme bei senden eines Strings übers Netzwerk Java Basics - Anfänger-Themen 4
P Strings via Netzwerk übermitteln Java Basics - Anfänger-Themen 8
G Netzwerk unterbrechen Java Basics - Anfänger-Themen 10
S Netzwerk nach ip adressen scannen Java Basics - Anfänger-Themen 7
U Netzwerk Chatprogramm Quellcode funktioniert nicht Java Basics - Anfänger-Themen 6
Nic.o getProperties - übers Netzwerk Java Basics - Anfänger-Themen 2
0 Objekte übers Netzwerk schicken? Bibliothek? Java Basics - Anfänger-Themen 2
D Java Tutorial zur Netzwerk / Datenbankprogrammierung gesucht Java Basics - Anfänger-Themen 2
F Bild per Netzwerk übertragen Java Basics - Anfänger-Themen 3
I Schiffe versenken, Netzwerk, swing, Thread Java Basics - Anfänger-Themen 5
G Netzwerk: RMI Objekt-Referenzen Java Basics - Anfänger-Themen 2
A Netzwerk Programmieren Java Basics - Anfänger-Themen 2
H Netzwerk-Thread Java Basics - Anfänger-Themen 7
H ObjectOutputStream Netzwerk writeObject Java Basics - Anfänger-Themen 6
G Strings übers Netzwerk verschicken Java Basics - Anfänger-Themen 2
Z Netzwerk graphisch Darstellen Java Basics - Anfänger-Themen 5
L Dateien im Netzwerk bearbeiten (UNC-Pfade und gemappte Laufw Java Basics - Anfänger-Themen 5
J Audio capturen und über's Netzwerk streamen? Java Basics - Anfänger-Themen 2
C BufferedReader und BufferedWriter im Netzwerk Java Basics - Anfänger-Themen 6
M E-Mail im Netzwerk über Microsoft Exchange Server versenden? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben