Rick's b.log - 2017/04/06 |
|
It is the 18th of December 2024 You are 3.143.1.253, pleased to meet you! |
|
mailto:
blog -at- heyrick -dot- eu
Originalement, quand je connecté au serveur web du IPCAM, j'ai eu vu:
C'est bien lente à charger sur une téléphone portable, même avec 3G. Donc, j'examine pour trouver le raison, et un solution.
Alors, ca que vous voir là compte pour environ 180Ko avec 11 demandes séparées. Une demande, pour jquery.min.js, compte pour 96Ko pour... pour quoi? C'est un très bon question!
Connectez-vous sur l'IPCAM avec telnet (Hearsay, Nettle, etc), et le nom root et mot de pass 123456:
Aller au dossier des fichiers web, puis demarrer ftp, connecter au Pi, et transférer les fichiers (c'est nous qui tapper les caractères en gros ☺):
Accès vers le mode MJPEG (navigateur puissant), mode photos (navigateur simple), directement vers le flux MJPEG sans contrôle de camera, et enfin directement vers les options du camera sans besoin de passer au mode MJPEG avant.
Je jettera le mode MSIE. Un ActiveX? En 2017? Putain, NON!
Il y trois morceaux de Javascript:
Juste après le ligne
Alors - attendre un petit moment - c'est tout en Anglais!
Faire pareil pour
En dernier chose. L'option "Back" ("Visualisation" en française) sur l'écran de configuration ne marche plus. Un petit modification sur
C'est tout.
Sur votre navigateur, connectez-vous au camera pour voir les changes.
Quand vous est heureux, déconnectez-vous sur telnet:
Voilà, une liste des options vite, légère, et simple.
Heureux hacking!
Uh... this stuff is in French?
Yup. The British government has gone and signed Article 50 (and then the wheels fell off...) so expect me to inflict my crappy French upon the world more frequently.
IPCAM hacking
C'est pour mon IPCAM, un MCL IP-CAMD610AW. Ces informations peut appliquer aussi pour FOSCAM, WANSCAM, et autres qui bien ressemble mon IPCAM - Wansview NCL610W pour exemple? Aucun garantie, mais on peut essayer, non?
Retrouver les fichiers d'origine
Pour créer les modifications, j'ai copié les fichiers sur mon Pi avec le server FTPs. Mettre en place FTPs pour traiter $.Public comme dossier de base et avec le utilisateur "root" avec un mot de passe. Créé les dossiers $.Public.system
et $.Public.system.www
.
Connecting to 192.168.1.20,23
Connected
(none) login: root
Password:
BusyBox v1.12.1 (2012-11-16 09:54:14 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands
#
# cd system/www
# /system/system/bin/ftp
ftp> open 192.168.1.10
Connected to 192.168.1.10.
220 Service ready for new user.
Name (192.168.1.10:root): root
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
ftp> cd system/www
200> Command okay.
ftp> binary
200> Command okay.
ftp> prompt
200> Command okay.
ftp> mput *
Les fichiers (~1.3Mo) ont copie dans quelques secondes.
Faire des sauvegardes
Tapez exit
pour quitter ftp, et faire un copie de l'originale de les fichiers nous modifier bientôt:
# cp index.htm index.backup.htm
# cp config.htm config.backup.htm
# cp jpeg.htm jpeg.backup.htm
# cp mobile.htm mobile.backup.htm
# cp public.js public.backup.js
Comment il marche?
Pour information - le fichier index.htm contient un iframe. Dans cet cadre, il peut charger:
Attention - touts les fichiers sont ".htm" sauf pour "jpeg.html".
Un meilleur voie
Pensez...
Et, en plus, il compte que trois demandes et 1.70Ko en totale! Génial!
Une nouvelle index.htm
<head>
<!-- Simpler camera web interface, by Rick Murray 2017/04/05 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="date" content="0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="0">
<title>Rick's tilt'n'turn camera</title>
<script src="get_status.cgi"></script> <!-- device identity -->
<script src="login.cgi"></script> <!-- who I am -->
</head>
<body text="white" bgcolor="black" link="cyan" vlink="cyan" alink="blue">
<h1>Rick's tilt'n'turn camera</h1>
<h3 style="margin-top: -20px;">(<script type="text/javascript">
document.write(deviceid+': '+loginuser+', ');
if (pri == 255)
document.write('<i>admin</i>');
else
document.write('viewer');
</script>)</h3>
<ul>
<li><a href="jpeg.html"><b>MJPEG mode</b> (full control)</a>
<br /><br />
<li><a href="mobile.htm"><b>Image mode</b> (simple)</a>
<br /><br />
<li><script type="text/javascript">document.write('<a href="videostream.cgi?loginuse='+loginuser+'&loginpas='+loginpass+'">');
</script><b>Video stream</b> (direct link)</a>
<br /><br />
<script type="text/javascript">
if (pri == 255)
document.write('<li><a href="config.htm"><b>Setup</b></a>');
</script>
</ul>
</body>
</html>
<script type="text/javascript">
document.write(deviceid+': '+loginuser+', ');
if (pri == 255)
document.write('<i>admin</i>');
else
document.write('viewer');
</script>
Ici il dire l'identification unique de le camera et votre nom de utilisateur. Après votre nom, il report "admin" si vous êtes l'administrateur, ou "viewer" autrement.
Actuallement, il y un troisième option, "opérateur", mais pour nous, vous êtes admin...ou pas.
<script type="text/javascript">document.write('<a href="videostream.cgi?loginuse='+loginuser+'&loginpas='+loginpass+'">');</script>
Ici nous a besoin d'un lien directe vers http://192.168.1.20/videostream.cgi?loginuse=USER&loginpas=PASS. Une risque de sécurité de mettra les données en clair comme ça? Bien sûr, mais cet camera fait ça tous les temps - sniffer les paquets!
L'information sur nom d'utilisateur et mot de passe retrouvé par login.cgi est valable uniquement après un bon connexion.
<script type="text/javascript">
if (pri == 255)
document.write('<li><a href="config.htm"><b>Setup</b></a>');
</script>
Enfin, le lien pour reconfigurer le camera apparu uniquement si vous êtes administrateur.
Autres corrections
Si nous appeler les fichiers directement, il casse le choses qu'anticiper de rester sur le cadre "iframe". Pour régler cet problème, charger le fichier jpeg.html
et cherche en haut pour:
<link rel="stylesheet" href="obj.css" type="text/css">
<script>
<script>
, ajouter:
var cookieuser = loginuser;
var cookiepass = loginpass;
var cookiepri = pri;
Oui, c'est vrai, mais nous peut corriger. En haut cherchez la ligne:
<script type="text/javascript src="public.js"></script>
Et juste dessus (pas dessous!), ajouter:
<script>var language = 3</script>
Les langues: 0 (ou pas specifié) for English, 1 para español, 2 für deutsch, 3 pour française, 4 per l'italiano, 5 dla polskiego, 6 한국을 위해 (Coréen), 7 为中文 (Chinois simple), 8 為中文 (Chinois traditionnel), 9 日本のために (Japonaise), et 10 para portugues.
mobile.htm
(qui dire correctement script language="javascript"!), et aussi dans config.htm
.
public.js
réparer le problème. Ouvrir cet fichier et cherche pour le fonction gobackpage (environ moitié). Changer cet fonction comme:
function gobackpage()
{
//alert(top.goback_page);
if (top.goback_page == null)
window.history.back();
else
location=top.goback_page;
}
Placer les fichiers sur le camera
Sur le camera, connecter un fois plus au server FTP et charger les fichiers modifié:
# cd /system/www
# /system/system/bin/ftp
ftp> open 192.168.1.10
Connected to 192.168.1.10.
220 Service ready for new user.
Name (192.168.1.10:root): root
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
ftp> cd system/www
200> Command okay.
ftp> binary
200> Command okay.
ftp> get index.htm
[...]
ftp> get jpeg.html
[...]
ftp> get mobile.htm
[...]
ftp> get config.htm
[...]
ftp> get public.js
ftp> exit
426 Connection closed; transfer aborted.
# exit
Disconnected by remote
Hugues, 2nd May 2017, 10:09 Sympa le hack de ces petites caméras je l'avais réalisé sur une caméra à base de processeur mips.
Tu utilise toujours ton RiscPC? J'utilise toujours ton dossier sur l'assembleur arm que tu as réalisé il y a maintenant bien longtemps.
© 2017 Rick Murray |
This web page is licenced for your personal, private, non-commercial use only. No automated processing by advertising systems is permitted. RIPA notice: No consent is given for interception of page transmission. |