[C] Socket + envoie de commande
|
23-04-2013, 15h27
(Modification du message : 25-04-2013, 13h02 par notfound.)
Message : #1
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 272 Inscription : Sep 2012 |
[C] Socket + envoie de commande
Hi there !
J'ai besoin d'aide concernant un programme que j'ai réalisé en C ! Je dois envoyer des commandes à un vidéoproj via câble Ethernet et j'ai pour l'occasion créé un programme qui se sert des sockets pour envoyer la commande ( i.e les commandes : PWR ON, PWR OFF). Or, mon problème est que lors de l'execution de mon programme, il y a bien établissement de connection etc, mais je ne retrouve pas (sous wireshark) ma commande envoyée ... Si quelqu'un aurait une idée ![]() Voici mon programme : Code C :
A l'execution, j'obtiens : Code BASH :
Sous Wireshark : ![]() PS : j'ai programmé en C car je ne connais pas d'autres langages pour l'instant, mais si vous souhaitez le faire en python ou autres, libre à vous. EDIT : J'ai réussi ! Wireshark c'est vraiment puissant quoi Merci à vous pour votre aide EDIT 2 : Voici mon code C fonctionnel Code C :
PS : Je sais, system() c'est le mal. |
|
23-04-2013, 15h29
Message : #2
|
|
supersnail
![]() Éleveur d'ornithorynques ![]() ![]() ![]() ![]() ![]() ![]() ![]() Messages : 1,617 Sujets : 73 Points: 466 Inscription : Jan 2012 |
RE: [C] Socket + envoie de commande
Et t'as quoi si tu fais "Follow TCP Stream" ?
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
23-04-2013, 18h03
(Modification du message : 24-04-2013, 14h12 par notfound.)
Message : #3
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 272 Inscription : Sep 2012 |
RE: [C] Socket + envoie de commande
(23-04-2013, 15h29)supersnail a écrit : Et t'as quoi si tu fais "Follow TCP Stream" ? J'ai la chose suivante : ![]() EDIT : Avec le logiciel EPSON, j'obtiens la chose suivante en analysant la trame : ![]() Or, j'arrive à obtenir le début, mais pas la suite. Malgré le fait que j'envoie ensuite les autres instructions ... ![]() Quelqu'un aurait une idée de génie ? ![]() |
|
23-04-2013, 18h25
(Modification du message : 23-04-2013, 18h27 par gruik.)
Message : #4
|
|
gruik
![]() gouteur de savon ![]() Messages : 757 Sujets : 44 Points: 483 Inscription : Oct 2012 |
RE: [C] Socket + envoie de commande
(23-04-2013, 15h27)notfound a écrit : Si quelqu'un aurait une idée ![]() ben j'ai l'impression que tu causes simplement pas exactement le même protocole que l'appareil en face sur la capture des paquets, on voit clairement l'établissement de connexion (SYN - SYN/ACK - ACK), tu envoies 1 paquet de données (PUSH), le serveur te répond un truc lui aussi (PUSH), puis l'un des deux met fin à la connexion (toi avec ton FIN à priori ?) et au niveau du "follow tcp stream" dans wireshark, on voit bien qu'un dialogue normal avec le videoprojecteur, on envoit un paquet (probablement pour dire bonjour), on recoit un paquet du serveur (le meme que tu recevais en envoyant ton PWR OFF), puis on envoit un 2nd paquet à priori pour lui demander la version du protocole ou du logiciel ou autre, le serveur répond et après seulement on renvoit un paquet avec la commande PWR OFF difficile de dire beaucoup plus, si vraiment tu galères ca pourrait etre une bonne idée de mettre les .pcap en piece jointe éventuellement... |
|
23-04-2013, 19h43
Message : #5
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 272 Inscription : Sep 2012 |
RE: [C] Socket + envoie de commande
Est-ce que ça ne viendrait pas de mon code C ?
Code C :
Peut-être ne faut-il pas que je close ma socket ? |
|
23-04-2013, 19h47
Message : #6
|
|
supersnail
![]() Éleveur d'ornithorynques ![]() ![]() ![]() ![]() ![]() ![]() ![]() Messages : 1,617 Sujets : 73 Points: 466 Inscription : Jan 2012 |
RE: [C] Socket + envoie de commande
Ben ça dépend (comme le dit gruik) de comment c'est implémenté au niveau de ton vidéoprojecteur.
Et comme j'ai dit iirc, le plus simple dans ce cas c'est de faire du reverse-engineering sur l'application "officielle" pour comprendre comment c'est fait. Et comme dit gruik (again :>), file-nous le .pcap de la transmission "officielle" faite par le prog epson pour y voir plus clair ![]()
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
24-04-2013, 10h51
Message : #7
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 272 Inscription : Sep 2012 |
RE: [C] Socket + envoie de commande
Le fichier .pcap du trafic entier "officiel" avec le logiciel EPSON
http://dl.free.fr/getfile.pl?file=/lSJuWFKk |
|
24-04-2013, 12h25
(Modification du message : 24-04-2013, 12h27 par Kiwazaru.)
Message : #8
|
|
Kiwazaru
![]() Padawan d'un super escargot ![]() Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] Socket + envoie de commande
Code C :
#include<sys/socket.h> On vois dans tes requêtes entre ton PC et ton VideoProjecteur : ESC/VP.net......ESC/VP.net.... .VER? VER=260051300BWWV121 VER=1XGV43 VER=263051WWV121 VER=---- VER=---- :LAMP? LAMP=11 :PWSTATUS? PWSTATUS=03 00000002 00000000 T1 F1 :SOURCE? SOURCE=41 :VER? VER=260051300BWWV121 VER=1XGV43 VER=263051WWV121 VER=---- VER=---- :SNO? SNO=QVTF281374L :MBSTATUS? MBSTATUS=01 01 :IMPWR OFF :IMEVENT=0001 04 00000002 00000000 T1 F1 :IMEVENT=0001 01 00000000 00000000 T1 F1 : Rouge: PC Bleu: VideoProjecteur EPSON On vois donc bien que le logiciel EPSON envoi des requêtes du style la version du vidéo-projecteur, la Source ... et ensuite il envoi "IMPWR OFF" autrement dit éteindre la machine, c'est peu être grâce à toute ces requêtes (VER?, SOURCE?) que le vidéo-projecteur va comprendre qu'une action va être effectué ou quoi (On ne peut pas trop en savoir plus, aucune doc existe apparemment). Dans le nouveau code C, on simule donc toute ses requêtes au lieu d'envoyer directement "IMPWR OFF'" que le vidéo-projecteur ne comprendra sûrement pas sans les requêtes VER?, SOURCE? préalablement envoyées. Ce n'est que déduction :p, pour le code je sais pas si on peut faire plus simple/propre. Donne nous des nouvelles du projet ![]()
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
24-04-2013, 13h00
(Modification du message : 24-04-2013, 13h10 par gruik.)
Message : #9
|
|
gruik
![]() gouteur de savon ![]() Messages : 757 Sujets : 44 Points: 483 Inscription : Oct 2012 |
RE: [C] Socket + envoie de commande
je crois plutot que le probleme vient du fait qu'il n'envoit qu'un seul paquet et ferme la connexion, à mon avis envoyer un paquet bonjour / attendre la reponse du videoprojecteur / envoyer la commande IMPWR OFF doit suffire
edit: paquet bonjour : "ESC/VP.net\x10\x03\x00\x00\x00\x00" => doit recevoir du vp : "ESC/VP.net\x10\x03\x00\x00\x20\x00" paquet commande : "IMPWR OFF\n" => et là encore le vp renvoit qqes données suite à ça... j'imagine que le vp shutdown donc qu'on peut fermer la connexion comme un sale, à tester... |
|
24-04-2013, 13h16
Message : #10
|
|
Kiwazaru
![]() Padawan d'un super escargot ![]() Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] Socket + envoie de commande
"ESC/VP.net\x10\x03\x00\x00\x00\x00" les \xXX\ derrière servent à quoi?
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
24-04-2013, 13h56
Message : #11
|
|
gruik
![]() gouteur de savon ![]() Messages : 757 Sujets : 44 Points: 483 Inscription : Oct 2012 |
RE: [C] Socket + envoie de commande
c'est une notation hexadecimale, 0x41 == \x41 == 'A' == 101o (octal) == 0o101
sinon c'est très exactement ce qu'on voit transiter dans la capture en l'occurence, pour des raisons de lisibilité wirehsark remplace les caractères ASCII non-printable par des points '.' |
|
24-04-2013, 13h57
Message : #12
|
|
Kiwazaru
![]() Padawan d'un super escargot ![]() Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] Socket + envoie de commande
Yep mais comment tu as su que c'était \x10\x03\x00\x00\x00\x00 0x10 puis 0x03 etc ? Vu qu'on ne vois que des points.
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
24-04-2013, 14h00
(Modification du message : 24-04-2013, 14h02 par gruik.)
Message : #13
|
|
gruik
![]() gouteur de savon ![]() Messages : 757 Sujets : 44 Points: 483 Inscription : Oct 2012 |
RE: [C] Socket + envoie de commande
ben en fouillant dans les bons paquets (tcp push)et en regardant le détail, ou dans la vue "follow tcp stream" tu peux aussi switcher vers "raw" ou "C array"
edit: typiquement le paquet n°14 de la capture, dans la fenetre principale cliquer sur "data" met en surbrillance dans le paquet les octets en question par exemple |
|
24-04-2013, 14h11
(Modification du message : 24-04-2013, 14h12 par notfound.)
Message : #14
|
|
notfound
![]() #!/usr/bin/env bash ![]() Messages : 687 Sujets : 47 Points: 272 Inscription : Sep 2012 |
RE: [C] Socket + envoie de commande
BTW, j'ai réussi hein (cf. edit 1er post)
|
|
24-04-2013, 16h52
Message : #15
|
|
Kiwazaru
![]() Padawan d'un super escargot ![]() Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [C] Socket + envoie de commande
Yep j'ai look
![]() Code C :
char peer1_0[] = { On vois bien la chaîne "0x10, 0x03, 0x00, 0x00, 0x20, 0x00" qui donne ton code ensuite ![]()
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
[shellcode] Reverse shell over reused socket | ark | 4 | 2,622 |
11-03-2014, 11h51 Dernier message: Ark |
|
[C] Socket Client-Serveur -> Write() + Read() | sakiir | 7 | 3,256 |
18-03-2013, 07h19 Dernier message: sakiir |
|
NEED HELP / SOCKET;FILTRES XDR; RPC | notfound | 4 | 2,347 |
21-01-2013, 02h18 Dernier message: notfound |
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)