Jerome-PS / JN516xSniffer

Transform a Xiaomi Zigbee gadget into a Zigbee sniffer.
40 stars 14 forks source link

Sous Windows: first experience #1

Open KiwiHC16 opened 6 years ago

KiwiHC16 commented 6 years ago

Salut Jerome-PS, J'essaye de faire marcher ta version en partant de la mienne et en avancent pas à pas. Je suis sous windows 7 Premiere étage: script Sniff.py

Côté wireshark ca semble ok maintenant, je passe a la compile du firmware.

KiwiHC16 commented 6 years ago

Côté firmware, je ne trouve aucune modification des .h, .c par contre visiblement un main.c complet qui doit être exécuté sur un bouton xiaomi avec le JN5169. Est ce bien cela ? (Makefile APPSRC += main.c UartBuffered.c Queue.c Printf.c -> compilé sur un linux)

KiwiHC16 commented 6 years ago

Sur quel type de bouton tu as fait tourné le truc ? Je vois 2 PIN en entrée dans le code mais le bouton que je possède n'a qu'un bouton accessible.

ifdef XIAMO_SMART_BUTTON

define LED_PIN_BIT (1 << 11)

define MAIN_PIN_BIT (1 << 16)

define PAIR_PIN_BIT (1 << 0)

endif //def XIAMO_SMART_BUTTON

KiwiHC16 commented 6 years ago

As tu ajouté la date sur chaque paquet ?

u8tstFrame[0] = ((uint8_t*)&u32Seconds)[3];
u8tstFrame[1] = ((uint8_t*)&u32Seconds)[2];
u8tstFrame[2] = ((uint8_t*)&u32Seconds)[1];
u8tstFrame[3] = ((uint8_t*)&u32Seconds)[0];
u8tstFrame[4] = ((uint8_t*)&u32Fraction)[3];
u8tstFrame[5] = ((uint8_t*)&u32Fraction)[2];
u8tstFrame[6] = ((uint8_t*)&u32Fraction)[1];
u8tstFrame[7] = ((uint8_t*)&u32Fraction)[0];
Jerome-PS commented 6 years ago

Exact, c’est le temps depuis le dernier reset qui est renseigné dans le champ date.

Le 30 janv. 2018 à 11:43, Ben notifications@github.com a écrit :

As tu ajouté la date sur chaque paquet ?

u8tstFrame[0] = ((uint8_t)&u32Seconds)[3]; u8tstFrame[1] = ((uint8_t)&u32Seconds)[2]; u8tstFrame[2] = ((uint8_t)&u32Seconds)[1]; u8tstFrame[3] = ((uint8_t)&u32Seconds)[0]; u8tstFrame[4] = ((uint8_t)&u32Fraction)[3]; u8tstFrame[5] = ((uint8_t)&u32Fraction)[2]; u8tstFrame[6] = ((uint8_t)&u32Fraction)[1]; u8tstFrame[7] = ((uint8_t)&u32Fraction)[0]; — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

Jerome-PS commented 6 years ago

Hello,

Super que tu testes! Ok, je vais corriger le truc et refaire un push...

Jérôme.

Le 30 janv. 2018 à 11:14, Ben notifications@github.com a écrit :

Salut Jerome-PS, J'essaye de faire marcher ta version en partant de la mienne et en avancent pas à pas. Je suis sous windows 7 Premiere étage: script Sniff.py

cd répertoire du script lancement du script -> plantage, il manque le () pour les appels à print -- print "" => print("") Je relance Wireshark s'ouvre mais se plaint de zb.lua

-- si je mets cette ligne en commentaire alors plus d erreur mais cela ne fonctionne pas, pas surprenant. -- Je mets donc des \ partout. Il semble content mais apres il ne trouve pas ser car non defini... — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

Jerome-PS commented 6 years ago

Effectivement presque tout se passe dans le main.c

Le 30 janv. 2018 à 11:33, Ben notifications@github.com a écrit :

Côté firmware, je ne trouve aucune modification des *.h, $.c par contre visiblement un main.c complet. Est ce bien cela ?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

Jerome-PS commented 6 years ago

Il s’agit du bouton principal et du bouton au fond d’un petit trou pour demander l’appariement. Mais pour l’instant ça ne fait rien, surtout si le #define est commenté...

Jérôme.

Le 30 janv. 2018 à 11:40, Ben notifications@github.com a écrit :

Sur quel type de bouton tu as fait tourné le truc ? Je vois 2 PIN en entrée dans le code mais le bouton que je possède n'a qu'un bouton accessible.

ifdef XIAMO_SMART_BUTTON

define LED_PIN_BIT (1 << 11)

define MAIN_PIN_BIT (1 << 16)

define PAIR_PIN_BIT (1 << 0)

endif //def XIAMO_SMART_BUTTON

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

Jerome-PS commented 6 years ago

Est-ce que tu utilises python 2 ou python 3?

Jerome-PS commented 6 years ago

Est-ce que tu peux tester avec le nouveau commit?

KiwiHC16 commented 6 years ago

Sur la base de mon premier post j ai reussi a compile pour un JN5168 (C est ce que j ai), le programmer, lancer sniffer.py, avoir wireshark, lancer le menu ZB-> start avoir les traces qui démarrent mais crash.

Dans lua j ai mis: comport = '\\.\pipe\wiresharkTx',

capture d ecran 2018-01-30 a 13 56 59

capture d ecran 2018-01-30 a 13 53 51

capture d ecran 2018-01-30 a 13 53 59

KiwiHC16 commented 6 years ago

capture d ecran 2018-01-30 a 14 01 21

Jerome-PS commented 6 years ago

D'accord, j'ai testé avec Python 2.7 ... Faut que j'installe Python3 du coup

Jerome-PS commented 6 years ago

C'est le code qui reouvre le pipe qui est à changer... Tu peux mettre un print(dir(e)) entre la ligne 123 et 124 de Sniff.py (juste avant le if(e[0]...

KiwiHC16 commented 6 years ago

Je n'ai pas récupéré ton push car les modifs sont celles que j'ai dans ma version. Dans le code il y a le traitement de l exception 109, c'est donc probabement un cas que tu as deja rencontré. Une idée sur le problème ? Est ce que tu essayes aussi sous windows ?

Dans le main.c j ai du commenter 2 instructions pour pouvoir compiler pour le JN5168: vJPT_GetRadioConfig(&u32RadioParamVersion); vJPT_SetMaxInputLevel(E_MAX_INP_LEVEL_10dB); mais je ne pense pas que cela explique le plantage python.

KiwiHC16 commented 6 years ago

Avec le print(dir(e)) capture d ecran 2018-01-30 a 14 11 13

Jerome-PS commented 6 years ago

Ce script ne sert que sous Windows (j'ai testé sous Windows 10). En fait quand le scipt lua a fini d'écrire, il ferme le pipe, ce qui le ferme aussi côté python, donc il faut le rouvrir (ce que fait le code de traitement de l'exception). Mais le code d'accès au contenu de l'exception doit être différent entre python3 et python2, ce qui pose le problème...

KiwiHC16 commented 6 years ago

Sais tu ou trouver le fichier pipe dans windows ? Impossible de le trouver...

Jerome-PS commented 6 years ago

Tu peux mettre un print(e.winerror) entre la ligne 123 et 124 de Sniff.py (juste avant le if(e[0]...

KiwiHC16 commented 6 years ago

J ai aussi essayé d'enlever les com:close() dans lua pour function zbstart() mais aussi un problème. capture d ecran 2018-01-30 a 14 15 48

Jerome-PS commented 6 years ago

Pour la compil pour JN5168, merci de l'info, je vais ajouter un #ifdef pour que ça marche à la fois avec JN5168 et JN5169.

KiwiHC16 commented 6 years ago

capture d ecran 2018-01-30 a 14 17 26 Pour print(e.winerror) Y aussi le print("<0:x>".format(ord(data))), que j enleve pour la suite

Jerome-PS commented 6 years ago

Sais tu ou trouver le fichier pipe dans windows ? Impossible de le trouver... <<<< Je ne comprends pas ta question

remplace e[0]==109 par e.winerror==109

KiwiHC16 commented 6 years ago

Ce script ne sert que sous Windows (j'ai testé sous Windows 10). En fait quand le scipt lua a fini d'écrire, il ferme le pipe, ce qui le ferme aussi côté python, donc il faut le rouvrir (ce que fait le code de traitement de l'exception). Mais le code d'accès au contenu de l'exception doit être différent entre python3 et python2, ce qui pose le problème...

C est ma comprehension aussi mais python plante et lua ne trouve plus le pipe. C est comme si python ne parvient pas a recréer le pipe. Pour ino python ne rend pas la main je suis obligé de le tuer (y aussi des dumpcap.exe qui restent de temps en temps)

Jerome-PS commented 6 years ago

remplace e[0]==109 par e.winerror==109 et ça devrait arrêter de planter... Pour tuer le script python, tu peux faire CTRL+Pause dans ta fenêtre de ligne de commande.

KiwiHC16 commented 6 years ago

capture d ecran 2018-01-30 a 14 25 55

C est mieux avec remplace e[0]==109 par e.winerror==109 python en crash plus. Par contre si j envoie des commandes de puis le menu lua, rien ne se passe. Je ne sais pas si le JN516x recoit la moindre demande.

KiwiHC16 commented 6 years ago

Pour tuer le script python, tu peux faire CTRL+Pause dans ta fenêtre de ligne de commande. en fait non car je suis dans une VM mais c est pas grave, le gestionnaire de tache fait le boulot.

KiwiHC16 commented 6 years ago

J arrete pour l instant. Si tu peux faire les tests de ton coté a me dire ce que tu trouves....

Jerome-PS commented 6 years ago

OK, je vais essayer de tester avec Python3, sinon, tu peux essayer avec Python2 aussi si tu veux...

Jerome-PS commented 6 years ago

Par contre, le 232 arrive dans le writefile, donc ce serait plutôt que tu as fermé wireshark ou coupé la capture...

Jerome-PS commented 6 years ago

Chez moi ça a l'air de marcher avec Python3 et Windows 10... (avec le dernier commit)

KiwiHC16 commented 6 years ago

Je regarderai de nouveau dans les jours à venir en fonction aussi des modifs que j'ai faites.