{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/05/03/adminrcon-mcrcon-client-de-connexion-a-distance-pour-les-serveurs-minecraft-resoudre-les-problemes-dun-serveur-minecraft/","llm_html_url":"https://tutos-gameserver.fr/2019/05/03/adminrcon-mcrcon-client-de-connexion-a-distance-pour-les-serveurs-minecraft-resoudre-les-problemes-dun-serveur-minecraft/llm","llm_json_url":"https://tutos-gameserver.fr/2019/05/03/adminrcon-mcrcon-client-de-connexion-a-distance-pour-les-serveurs-minecraft-resoudre-les-problemes-dun-serveur-minecraft/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"[ADMIN][RCON]    mcrcon, client de connexion à distance pour les serveurs minecraft\n\n &#8211; Resoudre les problemes d&rsquo;un serveur MineCraft","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2019-05-03T21:06:26+00:00","modified_at":"2019-05-03T21:06:26+00:00","word_count":2219,"reading_time_seconds":666,"summary":"Code: / * * Copyright (c) 2012, Tiiffi * * Ce logiciel est fourni «en l’état», sans mention expresse ou implicite. * garantie. En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts * découlant de l&#39;utilisation de ce logiciel. * * La permission est accordée à quiconque d’utiliser ce logiciel [&hellip;]","summary_points":["Code:\n/ *\n* Copyright (c) 2012, Tiiffi \n*\n* Ce logiciel est fourni «en l’état», sans mention expresse ou implicite.","* garantie.","En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts\n* découlant de l&#39;utilisation de ce logiciel.","*\n* La permission est accordée à quiconque d’utiliser ce logiciel à quelque fin que ce soit,\n* y compris les applications commerciales, et de le modifier et de le redistribuer\n* librement, sous réserve des restrictions suivantes:\n*\n* 1."],"topics":["Serveur minecraft"],"entities":[],"entities_metadata":[{"id":13,"name":"Serveur minecraft","slug":"serveur-minecraft","taxonomy":"category","count":2786,"url":"https://tutos-gameserver.fr/category/serveur-minecraft/"}],"tags":["Serveur minecraft"],"content_hash":"d1d1ad659489edd6ad7dfda20145e5f4","plain_text":"Code:\n/ *\n* Copyright (c) 2012, Tiiffi \n*\n* Ce logiciel est fourni «en l’état», sans mention expresse ou implicite.\n* garantie. En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts\n* découlant de l&#39;utilisation de ce logiciel.\n*\n* La permission est accordée à quiconque d’utiliser ce logiciel à quelque fin que ce soit,\n* y compris les applications commerciales, et de le modifier et de le redistribuer\n* librement, sous réserve des restrictions suivantes:\n*\n* 1. L&#39;origine de ce logiciel ne doit pas être déformée; il ne faut pas\n* prétendre que vous avez écrit le logiciel original. Si vous utilisez ce logiciel\n* dans un produit, un accusé de réception dans la documentation du produit serait\n* apprécié mais n&#39;est pas obligatoire.\n*\n* 2. Les versions sources modifiées doivent être clairement indiquées comme telles et ne doivent pas être modifiées.\n* dénaturé comme étant le logiciel d&#39;origine.\n*\n* 3. Cet avis ne peut être enlevé ou modifié d&#39;aucune source\n*  Distribution.\n* /\n \n/ *\n* Nom: mcrcon (minecraft rcon)\n*\n* Licence: Licence zlib / libpng\n*\n*\n* Contact:\n* WWW: http://sourceforge.net/projects/mcrcon/\n* MAIL: tiiffi_at_gmail_dot_com\n* IRC: tiiffi @ quakenet\n*\n*\n* La description:\n* Mcrcon est un client / terminal minecraft rcon puissant avec prise en charge de la coloration bukkit.\n* Il est bien adapté à l&#39;administration à distance et à être utilisé dans le cadre de scripts de maintenance de serveur automatisée.\n* Ne provoque pas de spam &quot;IO: canal cassé&quot; ou &quot;IO: Connection reset&quot; dans la console du serveur.\n*\n*\n* Caractéristiques:\n* - Mode terminal interactif. Maintient la connexion en vie.\n* - Envoyer plusieurs commandes dans une ligne de commande.\n*  - Mode silencieux. N&#39;imprime pas la sortie rcon.\n* - Prise en charge de la coloration bukkit sous Windows et Linux (shells compatibles sh).\n* - Code multiplateforme. Compile sur de nombreuses plates-formes avec des modifications mineures.\n*\n*\n* Historique de la version:\n*\n* 0.0.5\n* - Le programme utilise la fonctionnalité C99 (tableaux de longueur variable), donc l&#39;indicateur &quot;-std = gnu99&quot; est activé\n* GCC-compiler doit être utilisé pour éviter les avertissements inutiles.\n*\n* - Le tampon de réception Rcon est maintenant plus grand (2024 octets -&gt; 10240 octets).\n* * Merci aux forums &#39;gman_ftw&#39; @ Bukkit.\n*\n* - Correction du message d&#39;erreur invalide lors de la réception d&#39;un paquet rcon vide (10 octets).\n* * Merci aux forums &#39;pkmnfrk&#39; @ bukkit.\n*\n* - Le mode terminal se ferme maintenant automatiquement lorsque rcon socket est fermé par le serveur\n* ou si la taille du paquet ne peut pas être récupérée correctement.\n*\n* - Le client essaie maintenant de nettoyer les données du socket entrant si le dernier paquet était hors spécifications.\n*\n*\n* 0.0.4\n* - Revient au gestionnaire d&#39;erreur des options getopts par défaut (opterr = 1).\n* Le gestionnaire d&#39;erreurs personnalisé nécessite une réécriture.\n* - Quelques corrections utiles dans les chaînes de sortie du programme.\n* - Utilisation du programme (); La fonction attend maintenant d’entrer avant de quitter Windows.\n*\n*\n* 0.0.3\n* - Les couleurs sont maintenant supportées sur Windows aussi!\n* - Le mode terminal est maintenant déclenché avec l&#39;indicateur &quot;-t&quot;. Le drapeau &quot;-i&quot; fonctionne toujours pour\n*    rétrocompatibilité.\n* - Corrections de bugs (vérification de la taille des paquets évaluant toujours la validité des faux et des couleurs)\n* cocher toujours évaluer vrai).\n*\n*\n* 0.0.2\n* - La licence est passée de &#39;Licence ISC&#39; à &#39;Licence zlib / libpng&#39;.\n* - Corrections de bugs et nettoyage de code\n* - Mode interactif (drapeau -i). Le client agit comme un terminal interactif.\n* - La valeur de retour du programme est maintenant le nombre de commandes rcon envoyées avec succès.\n* Si la connexion ou l&#39;authentification échoue, la valeur de retour est -1.\n* - Les couleurs sont maintenant activées par défaut. Désormais, l&#39;indicateur -c désactive le support des couleurs.\n*\n*\n* 0.0.1\n* - Ajout du support expérimental pour les couleurs de bukkit.\n* Devrait fonctionner avec n&#39;importe quel shell compatible sh.\n* - Les données de chaîne de paquets sont limitées à 2048 octets maximum (DATA_BUFFSIZE).\n* Aucune idée de la façon dont Minecraft gère plusieurs paquets rcon.\n* Si quelqu&#39;un le sait, envoyez-moi un mail afin que je puisse le mettre en œuvre.\n*\n*\n* FAIRE:\n* - Rendre le tampon de réception dynamique\n* - Changer certains problèmes de taille de paquet en erreurs fatales\n* - Nettoyage du code\n* - Vérifier les variables globales (à supprimer si possible)\n* - Ajoute quelques vérifications de protocole\n* - Nettoyage du préprocesseur (#ifdef / #ifndef)\n* - Suivre le protocole standard de valve rcon?\n* - Support de paquets multiples si Minecraft le supporte?!\n* - Recherchez si les messages de discussion du joueur sont envoyés via rcon.\n* S&#39;ils le sont, le système de messagerie nécessite une réécriture.\n*\n*\n* Rapports de bugs et demandes de fonctionnalités à tiiffi_at_gmail_dot_com.\n*\n* /\n \n \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n \n#ifdef _WIN32\n    / * pour la résolution de noms sous windows * /\n    #define _WIN32_WINNT 0x0501\n \n    #comprendre \n    #comprendre \n    #comprendre \n#autre\n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n#fin si\n \n/ * macro valeur absolue\n#define absolute (x) (x &lt;0)? (0 - x): x\n* /\n \n#define RCON_EXEC_COMMAND 2\n#define RCON_AUTHENTICATE 3\n#define RCON_RESPONSEVALUE 0\n#define RCON_AUTH_RESPONSE 2\n#define RCON_PID 42\n \n/ * Valeur sûre je pense. Cela devrait me rendre dynamique pour des performances plus stables! * /\n#define DATA_BUFFSIZE 10240\n \n#define VERSION &quot;0.0.5&quot;\n#define IN_NAME &quot;mcrcon&quot;\n#define VER_STR IN_NAME &quot;&quot; VERSION\n \n/ * structure de paquets rcon * /\ntypedef struct _rc_packet \n    taille int;\n    int id;\n    int cmd;\n    données de char[DATA_BUFFSIZE];\n    / * ignorant string2 atm .. * /\n rc_packet;\n \n/* les fonctions */\n \nerreur vide (char * errstring);\n#ifndef _WIN32\nvoid print_color (int color);\n#fin si\n \nstruct in_addr net_resolve (char * host);\nvoid net_close_socket (int sd);\nint net_open_socket (char * host, int port);\nint net_send_packet (int sd, rc_packet * packet);\nrc_packet * net_recv_packet (int sd);\n#ifdef _WIN32\nvoid net_init_WSA (void);\n#fin si\nint net_clean_incoming (int sd, taille int);\n \nrc_packet * packet_build (int id, int cmd, char * s1);\nvoid packet_print (rc_packet * packet);\n \nint rcon_auth (int rsock, char * passwd);\nint rcon_command (int rsock, char * command);\n \nint get_line (char * buffer, int len);\nint run_terminal_mode (int rsock);\nint run_commands (int argc, char * argv[])\n \n \n/ * des globals * /\nint silent_mode = 0;\nint print_colors = 1;\nint connection_alive = 1;\nchaussette; / * prise rcon * /\n \n#ifdef _WIN32\n  / * console à colorier sous windows * /\n  HANDLE console_handle;\n#fin si\n \n/ * trucs de sécurité (les fenêtres fonctionnent toujours mal) * /\nvoid exit_proc (void) \n    if (rsock! = -1) net_close_socket (rsock);\n\n \n/ * Vérifiez le comportement de windows et linux !!! * /\nvoid sighandler (int sig) \n    connexion_alive = 0;\n    #ifndef _WIN32\n      sortie (-1);\n    #fin si\n\n \nint principal (int argc, char * argv[])\n\n    int opt, ret = 0;\n    int terminal_mode = 1;\n \n    char * host = &quot;192.168.1.3&quot;;\n    char * pass = &quot;123456&quot;;\n    int port = 25575;\n \n \n \n    opterr = 1; / * gestionnaire d&#39;erreurs par défaut activé * /\n    while ((opt = getopt (argc, argv, &quot;tcshH: p: p: i&quot;))!! = -1)\n    \n        commutateur (opt)\n        \n            cas &#39;H&#39;: hôte = optarg; Pause;\n            cas &#39;P&#39;: port = atoi (optarg); Pause;\n            cas &#39;p&#39;: pass = optarg; Pause;\n            cas &#39;C&#39;:\n            case &#39;c&#39;: print_colors = 0; Pause;\n            cas &#39;s&#39;:\n            case &#39;s&#39;: silent_mode = 1; Pause;\n            cas &#39;T&#39;:\n            cas &#39;t&#39;:\n            cas &#39;je&#39;:\n            case &#39;i&#39;: terminal_mode = 1; Pause;\n            cas &#39;h&#39;:\n            Cas &#39;?&#39;:\n                / *\n                if (optopt == &#39;P&#39; \n    \n \n    if (hôte == NULL) \n        fputs (&quot;Hôte non défini. Indicateur de vérification -H.  n  n&quot;, stdout);\n \n    \n \n    si (port ai_addr;\n \n    adresse = sockaddr_ipv4-&gt; sin_addr;\n \n    freeaddrinfo (résultat);\n \n    adresse de retour;\n\n \n/ * socket close and cleanup * /\nvoid net_close_socket (int sd)\n\n    #ifdef _WIN32\n        closesocket (sd);\n        WSACleanup ();\n    #autre\n        fermer (sd);\n    #fin si\n\n \n/ * Ouvre et connecte prise * /\nint net_open_socket (char * host, int port)\n\n    int sd;\n    struct sockaddr_in sa;\n \n    memset (&amp; sa, 0, sizeof (sa)); / * Définit la structure pleine de zéros. * /\n    sa.sin_family = AF_INET; / * Adresse Famille Inet = Protocole Famille Inet. * /\n    sa.sin_port = htons (port); /* Numéro de port. * /\n    sa.sin_addr = net_resolve (hôte); / * résolvez l&#39;hôte. * /\n \n    if ((sd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP))) < 0)\n    \n        #ifdef _WIN32\n            WSACleanup();\n        #endif\n        error(\"Error: cannot create socket.n\");\n    \n \n    if(connect(sd, (struct sockaddr *)&#038;sa, sizeof(sa)) != 0)\n    \n        net_close_socket(sd);\n        fprintf(stderr, \"Error: connection failed (%s).n\", host);\n        exit(-1);\n    \n \n    return sd;\n\n \nint net_send_packet(int sd, rc_packet *packet)\n\n    int len;\n    int total = 0;        /* how many bytes we've sent */\n    int bytesleft;        /* how many we have left to send */\n    int ret = -1;\n \n    bytesleft = len = packet->taille + taillede (int);\n \n    tandis que (total &lt;len)\n    \n        ret = send (sd, (char *) packet + total, bytesleft, 0);\n        if (ret == -1) break; \n        total + = ret;\n        bytesleft - = ret;\n    \n \n    / * retourne -1 en cas d&#39;échec, 0 en cas de succès * /\n    Retourner Ret == -1? -1: 1;\n\n \nrc_packet * net_recv_packet (int sd)\n\n \nint net_clean_incoming (int sd, int size)\n\n    char tmp[size];\n \n    int ret = recv (sd, tmp, taille, 0);\n \n    si (ret == 0) \n        fprintf (stderr, &quot;Connexion perdue.  n&quot;);\n        connexion_alive = 0;\n    \n \n    retour ret;\n\n \nvoid print_color (int color)\n\n    / * palette de couleurs compatible sh * /\n    #ifndef _WIN32\n    char * couleurs[] = \n        &quot; 033[0; 30m &quot;, / * 00 BLACK 0x30 * /\n        &quot; 033[0; 34m &quot;, / * 01 BLEU 0x31 * /\n        &quot; 033[0; 32m &quot;, / * 02 GREEN 0x32 * /\n        &quot; 033[0; 36m &quot;, / * 03 CYAN 0x33 * /\n        &quot; 033[0; 31m &quot;, / * 04 RED 0x34 * /\n        &quot; 033[0; 35m &quot;, / * 05 PURPLE 0x35 * /\n        &quot; 033[0; 33m &quot;, / * 06 GOLD 0x36 * /\n        &quot; 033[0; 37m &quot;, / * 07 GREY 0x37 * /\n        &quot; 033[1; 30m &quot;, / * 08 DGREY 0x38 * /\n        &quot; 033[1; 34m &quot;, / * 09 LBLUE 0x39 * /\n        &quot; 033[1; 32m &quot;, / * 10 LGREEN 0x61 * /\n        &quot; 033[1; 36m &quot;, / * 11 LCYAN 0x62 * /\n        &quot; 033[1; 31m &quot;, / * 12 LRED 0x63 * /\n        &quot; 033[1; 35m &quot;, / * 13 LPURPLE 0x64 * /\n        &quot; 033[1; 33m &quot;, / * 14 JAUNE 0x65 * /\n        &quot; 033[1; 37m &quot;, / * 15 BLANC 0x66 * /\n    ;\n \n    si (couleur == 0) \n        fputs (&quot; 033[0m &quot;, stdout); / * ANNULER COULEUR * /\n    \n    autre\n    #fin si\n    \n        si (couleur&gt; = 0x61 &amp;&amp; couleur = 0x30 &amp;&amp; couleur Les données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                print_color (paquet-&gt; données[i])\n                continuer;\n            \n            si (paquet-&gt; données[i] == 0x0A) print_color (def_color);\n \n            putchar (paquet-&gt; données[i])\n        \n        print_color (def_color); / * annuler la coloration * /\n \n    \n    / * couleurs de bande * /\n    autre\n    \n        pour (i = 0; (unsigned char)) paquet-&gt; données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                continuer;\n            \n            putchar (paquet-&gt; données[i])\n        \n    \n \n    / * Affiche une nouvelle ligne si la chaîne n&#39;a pas de nouvelle ligne * /\n    si (paquet-&gt; données[i-1] ! = 10 &amp;&amp; packet-&gt; data[i-1] ! = 13)\n        putchar (&#39; n&#39;);\n\n \nrc_packet * packet_build (int id, int cmd, char * s1)\n/ * fonction hacky * /\n    paquet statique de paquetage = 0, 0, 0, 0x00;\n \n    / * taille + id + cmd + s1 + s2 terminaison NULL * /\n    int s1_len = strlen (s1);\n    if (s1_len&gt; DATA_BUFFSIZE) \n        fprintf (stderr, &quot;Avertissement: La chaîne de commande est trop longue (% d). Maximum autorisé:% d.  n&quot;, s1_len, DATA_BUFFSIZE);\n        return NULL;\n    \n \n    packet.size = sizeof (int) * 2 + s1_len + 2;\n    packet.id = id;\n    packet.cmd = cmd;\n    strncpy (packet.data, s1, DATA_BUFFSIZE);\n \n    retour et paquet;\n\n \nint rcon_auth (int rsock, char * passwd)\n\n    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_AUTHENTICATE, passwd);\n    if (paquet == NULL) renvoie 0;\n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    / * retourne 1 si authentification OK * /\n    return packet-&gt; id == -1? 0: 1;\n\n \nint rcon_command (int rsock, char * commande)\n\n    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_EXEC_COMMAND, commande);\n    si (paquet == NULL) \n        connexion_alive = 0;\n        retourne 0;\n    \n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    if (packet-&gt; id! = RCON_PID) renvoie 0; / * mauvais identifiant de paquet * /\n \n    si (! silent_mode) \n        / *\n        si (paquet-&gt; taille == 10) \n            printf (&quot;Commande inconnue &quot;% s  &quot;. Tapez &quot; help  &quot;ou &quot;?  &quot;pour obtenir de l&#39;aide.  n&quot;, commande);\n        \n        autre\n        * /\n        si (paquet-&gt; taille&gt; 10)\n            packet_print (packet);\n    \n \n    / * retourne 1 si le monde a été sauvé * /\n    retourne 1;\n\n \nint run_commands (int argc, char * argv[])\n\n    int i, ok = 1, ret = 0;\n \n    pour (i = optind; i < argc &#038;&#038; ok; i++) \n        ok = rcon_command(rsock, argv[i]);\n        ret += ok;\n    \n \n    return ret;\n\n \n/* interactive terminal mode */\nint run_terminal_mode(int rsock)\n\n    int ret = 0;\n    char command[DATA_BUFFSIZE] = 0x00;\n \n    puts(\"Logged in. Type \"Q\" to quit!\");\n \n    while(connection_alive) \n \n        int len = get_line(command, DATA_BUFFSIZE);\n        if(command[0] == 'Q' &#038;&#038; command[1] == 0) break;\n \n        if(len > 0 &amp;&amp; connection_alive) ret + = rcon_command (rsock, commande);\n \n        commander[0] = len = 0;\n    \n \n    retour ret;\n\n \n/ * obtient une ligne de stdin et traite les déchets laissés dans le tampon d&#39;entrée * /\nint get_line (char * buffer, int bsize)\n\n    int ch, len;\n \n    fputs (&quot;&gt;&quot;, stdout);\n    fgets (buffer, bsize, stdin);\n \n    si (tampon[0] == 0) connection_alive = 0;\n \n    / * supprime les caractères indésirables de la mémoire tampon * /\n    tampon[strcspn(buffer, \"rn\")] = &#39; 0&#39;;\n \n    len = strlen (tampon);\n \n    / * nettoie le tampon d&#39;entrée si nécessaire * /\n    if (len == bsize - 1)\n        while ((ch = getchar ())! = &#39; n&#39; &amp;&amp; ch! = EOF);\n \n    renvoyer len;\n\n\n\n4. C4Droid + GCC plugin (dans les paramètres de c4droid, vous devez sélectionner le compilateur: &quot;GCC + Bionic&quot;).\nDonc, vous venez de compiler ce code, allez dans le dossier: /data/data/com.n0n3m4.droidc/files/temp et copiez le fichier &quot;temp&quot; sur votre sdcard ou dans un autre dossier. Après cela, vous allez à l’entrée du terminal: &quot;/ mnt / sdcard / temp&quot; ou le chemin complet de ce fichier.\nVous pouvez également essayer de créer moi-même un fichier binaire (copiez-le simplement sur la carte SD et entrez &quot;/ mnt / sdcard / temp&quot; dans le terminal (si votre carte SD est montée dans le dossier &quot;sdcard&quot;).\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["Code:\n/ *\n* Copyright (c) 2012, Tiiffi \n*\n* Ce logiciel est fourni «en l’état», sans mention expresse ou implicite.\n* garantie. En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts\n* découlant de l&#39;utilisation de ce logiciel.\n*\n* La permission est accordée à quiconque d’utiliser ce logiciel à quelque fin que ce soit,\n* y compris les applications commerciales, et de le modifier et de le redistribuer\n* librement, sous réserve des restrictions suivantes:\n*\n* 1. L&#39;origine de ce logiciel ne doit pas être déformée; il ne faut pas\n* prétendre que vous avez écrit le logiciel original. Si vous utilisez ce logiciel\n* dans un produit, un accusé de réception dans la documentation du produit serait\n* apprécié mais n&#39;est pas obligatoire.\n*\n* 2. Les versions sources modifiées doivent être clairement indiquées comme telles et ne doivent pas être modifiées.\n* dénaturé comme étant le logiciel d&#39;origine.\n*\n* 3. Cet avis ne peut être enlevé ou modifié d&#39;aucune source\n*  Distribution.\n* /\n \n/ *\n* Nom: mcrcon (minecraft rcon)\n*\n* Licence: Licence zlib / libpng\n*\n*\n* Contact:\n* WWW: http://sourceforge.net/projects/mcrcon/\n* MAIL: tiiffi_at_gmail_dot_com\n* IRC: tiiffi @ quakenet\n*\n*\n* La description:\n* Mcrcon est un client / terminal minecraft rcon puissant avec prise en charge de la coloration bukkit.\n* Il est bien adapté à l&#39;administration à distance et à être utilisé dans le cadre de scripts de maintenance de serveur automatisée.\n* Ne provoque pas de spam &quot;IO: canal cassé&quot; ou &quot;IO: Connection reset&quot; dans la console du serveur.\n*\n*\n* Caractéristiques:\n* - Mode terminal interactif. Maintient la connexion en vie.\n* - Envoyer plusieurs commandes dans une ligne de commande.\n*  - Mode silencieux. N&#39;imprime pas la sortie rcon.\n* - Prise en charge de la coloration bukkit sous Windows et Linux (shells compatibles sh).\n* - Code multiplateforme. Compile sur de nombreuses plates-formes avec des modifications mineures.\n*\n*\n* Historique de la version:\n*\n* 0.0.5\n* - Le programme utilise la fonctionnalité C99 (tableaux de longueur variable), donc l&#39;indicateur &quot;-std = gnu99&quot; est activé\n* GCC-compiler doit être utilisé pour éviter les avertissements inutiles.\n*\n* - Le tampon de réception Rcon est maintenant plus grand (2024 octets -&gt; 10240 octets).\n* * Merci aux forums &#39;gman_ftw&#39; @ Bukkit.\n*\n* - Correction du message d&#39;erreur invalide lors de la réception d&#39;un paquet rcon vide (10 octets).\n* * Merci aux forums &#39;pkmnfrk&#39; @ bukkit.\n*\n* - Le mode terminal se ferme maintenant automatiquement lorsque rcon socket est fermé par le serveur\n* ou si la taille du paquet ne peut pas être récupérée correctement.\n*\n* - Le client essaie maintenant de nettoyer les données du socket entrant si le dernier paquet était hors spécifications.\n*\n*\n* 0.0.4\n* - Revient au gestionnaire d&#39;erreur des options getopts par défaut (opterr = 1).\n* Le gestionnaire d&#39;erreurs personnalisé nécessite une réécriture.\n* - Quelques corrections utiles dans les chaînes de sortie du programme.\n* - Utilisation du programme (); La fonction attend maintenant d’entrer avant de quitter Windows.\n*\n*\n* 0.0.3\n* - Les couleurs sont maintenant supportées sur Windows aussi!\n* - Le mode terminal est maintenant déclenché avec l&#39;indicateur &quot;-t&quot;. Le drapeau &quot;-i&quot; fonctionne toujours pour\n*    rétrocompatibilité.\n* - Corrections de bugs (vérification de la taille des paquets évaluant toujours la validité des faux et des couleurs)\n* cocher toujours évaluer vrai).\n*\n*\n* 0.0.2\n* - La licence est passée de &#39;Licence ISC&#39; à &#39;Licence zlib / libpng&#39;.\n* - Corrections de bugs et nettoyage de code\n* - Mode interactif (drapeau -i). Le client agit comme un terminal interactif.\n* - La valeur de retour du programme est maintenant le nombre de commandes rcon envoyées avec succès.\n* Si la connexion ou l&#39;authentification échoue, la valeur de retour est -1.\n* - Les couleurs sont maintenant activées par défaut. Désormais, l&#39;indicateur -c désactive le support des couleurs.\n*\n*\n* 0.0.1\n* - Ajout du support expérimental pour les couleurs de bukkit.\n* Devrait fonctionner avec n&#39;importe quel shell compatible sh.\n* - Les données de chaîne de paquets sont limitées à 2048 octets maximum (DATA_BUFFSIZE).\n* Aucune idée de la façon dont Minecraft gère plusieurs paquets rcon.\n* Si quelqu&#39;un le sait, envoyez-moi un mail afin que je puisse le mettre en œuvre.\n*\n*\n* FAIRE:\n* - Rendre le tampon de réception dynamique\n* - Changer certains problèmes de taille de paquet en erreurs fatales\n* - Nettoyage du code\n* - Vérifier les variables globales (à supprimer si possible)\n* - Ajoute quelques vérifications de protocole\n* - Nettoyage du préprocesseur (#ifdef / #ifndef)\n* - Suivre le protocole standard de valve rcon?\n* - Support de paquets multiples si Minecraft le supporte?!\n* - Recherchez si les messages de discussion du joueur sont envoyés via rcon.\n* S&#39;ils le sont, le système de messagerie nécessite une réécriture.\n*\n*\n* Rapports de bugs et demandes de fonctionnalités à tiiffi_at_gmail_dot_com.\n*\n* /\n \n \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n \n#ifdef _WIN32\n    / * pour la résolution de noms sous windows * /\n    #define _WIN32_WINNT 0x0501\n \n    #comprendre \n    #comprendre \n    #comprendre \n#autre\n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n#fin si\n \n/ * macro valeur absolue\n#define absolute (x) (x &lt;0)? (0 - x): x\n* /\n \n#define RCON_EXEC_COMMAND 2\n#define RCON_AUTHENTICATE 3\n#define RCON_RESPONSEVALUE 0\n#define RCON_AUTH_RESPONSE 2\n#define RCON_PID 42\n \n/ * Valeur sûre je pense. Cela devrait me rendre dynamique pour des performances plus stables! * /\n#define DATA_BUFFSIZE 10240\n \n#define VERSION &quot;0.0.5&quot;\n#define IN_NAME &quot;mcrcon&quot;\n#define VER_STR IN_NAME &quot;&quot; VERSION\n \n/ * structure de paquets rcon * /\ntypedef struct _rc_packet \n    taille int;\n    int id;\n    int cmd;\n    données de char[DATA_BUFFSIZE];\n    / * ignorant string2 atm .. * /\n rc_packet;\n \n/* les fonctions */\n \nerreur vide (char * errstring);\n#ifndef _WIN32\nvoid print_color (int color);\n#fin si\n \nstruct in_addr net_resolve (char * host);\nvoid net_close_socket (int sd);\nint net_open_socket (char * host, int port);\nint net_send_packet (int sd, rc_packet * packet);\nrc_packet * net_recv_packet (int sd);\n#ifdef _WIN32\nvoid net_init_WSA (void);\n#fin si\nint net_clean_incoming (int sd, taille int);\n \nrc_packet * packet_build (int id, int cmd, char * s1);\nvoid packet_print (rc_packet * packet);\n \nint rcon_auth (int rsock, char * passwd);\nint rcon_command (int rsock, char * command);\n \nint get_line (char * buffer, int len);\nint run_terminal_mode (int rsock);\nint run_commands (int argc, char * argv[])\n \n \n/ * des globals * /\nint silent_mode = 0;\nint print_colors = 1;\nint connection_alive = 1;\nchaussette; / * prise rcon * /\n \n#ifdef _WIN32\n  / * console à colorier sous windows * /\n  HANDLE console_handle;\n#fin si\n \n/ * trucs de sécurité (les fenêtres fonctionnent toujours mal) * /\nvoid exit_proc (void) \n    if (rsock! = -1) net_close_socket (rsock);"," \n/ * Vérifiez le comportement de windows et linux !!! * /\nvoid sighandler (int sig) \n    connexion_alive = 0;\n    #ifndef _WIN32\n      sortie (-1);\n    #fin si"," \nint principal (int argc, char * argv[])","    int opt, ret = 0;\n    int terminal_mode = 1;\n \n    char * host = &quot;192.168.1.3&quot;;\n    char * pass = &quot;123456&quot;;\n    int port = 25575;\n \n \n \n    opterr = 1; / * gestionnaire d&#39;erreurs par défaut activé * /\n    while ((opt = getopt (argc, argv, &quot;tcshH: p: p: i&quot;))!! = -1)\n    \n        commutateur (opt)\n        \n            cas &#39;H&#39;: hôte = optarg; Pause;\n            cas &#39;P&#39;: port = atoi (optarg); Pause;\n            cas &#39;p&#39;: pass = optarg; Pause;\n            cas &#39;C&#39;:\n            case &#39;c&#39;: print_colors = 0; Pause;\n            cas &#39;s&#39;:\n            case &#39;s&#39;: silent_mode = 1; Pause;\n            cas &#39;T&#39;:\n            cas &#39;t&#39;:\n            cas &#39;je&#39;:\n            case &#39;i&#39;: terminal_mode = 1; Pause;\n            cas &#39;h&#39;:\n            Cas &#39;?&#39;:\n                / *\n                if (optopt == &#39;P&#39; \n    \n \n    if (hôte == NULL) \n        fputs (&quot;Hôte non défini. Indicateur de vérification -H.  n  n&quot;, stdout);\n \n    \n \n    si (port ai_addr;\n \n    adresse = sockaddr_ipv4-&gt; sin_addr;\n \n    freeaddrinfo (résultat);\n \n    adresse de retour;"," \n/ * socket close and cleanup * /\nvoid net_close_socket (int sd)","    #ifdef _WIN32\n        closesocket (sd);\n        WSACleanup ();\n    #autre\n        fermer (sd);\n    #fin si"," \n/ * Ouvre et connecte prise * /\nint net_open_socket (char * host, int port)","    int sd;\n    struct sockaddr_in sa;\n \n    memset (&amp; sa, 0, sizeof (sa)); / * Définit la structure pleine de zéros. * /\n    sa.sin_family = AF_INET; / * Adresse Famille Inet = Protocole Famille Inet. * /\n    sa.sin_port = htons (port); /* Numéro de port. * /\n    sa.sin_addr = net_resolve (hôte); / * résolvez l&#39;hôte. * /\n \n    if ((sd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP))) < 0)\n    \n        #ifdef _WIN32\n            WSACleanup();\n        #endif\n        error(\"Error: cannot create socket.n\");\n    \n \n    if(connect(sd, (struct sockaddr *)&#038;sa, sizeof(sa)) != 0)\n    \n        net_close_socket(sd);\n        fprintf(stderr, \"Error: connection failed (%s).n\", host);\n        exit(-1);\n    \n \n    return sd;","int net_send_packet(int sd, rc_packet *packet)","int len;\n    int total = 0;        /* how many bytes we've sent */\n    int bytesleft;        /* how many we have left to send */\n    int ret = -1;\n \n    bytesleft = len = packet->taille + taillede (int);\n \n    tandis que (total &lt;len)\n    \n        ret = send (sd, (char *) packet + total, bytesleft, 0);\n        if (ret == -1) break; \n        total + = ret;\n        bytesleft - = ret;\n    \n \n    / * retourne -1 en cas d&#39;échec, 0 en cas de succès * /\n    Retourner Ret == -1? -1: 1;"," \nrc_packet * net_recv_packet (int sd)"," \nint net_clean_incoming (int sd, int size)","    char tmp[size];\n \n    int ret = recv (sd, tmp, taille, 0);\n \n    si (ret == 0) \n        fprintf (stderr, &quot;Connexion perdue.  n&quot;);\n        connexion_alive = 0;\n    \n \n    retour ret;"," \nvoid print_color (int color)","    / * palette de couleurs compatible sh * /\n    #ifndef _WIN32\n    char * couleurs[] = \n        &quot; 033[0; 30m &quot;, / * 00 BLACK 0x30 * /\n        &quot; 033[0; 34m &quot;, / * 01 BLEU 0x31 * /\n        &quot; 033[0; 32m &quot;, / * 02 GREEN 0x32 * /\n        &quot; 033[0; 36m &quot;, / * 03 CYAN 0x33 * /\n        &quot; 033[0; 31m &quot;, / * 04 RED 0x34 * /\n        &quot; 033[0; 35m &quot;, / * 05 PURPLE 0x35 * /\n        &quot; 033[0; 33m &quot;, / * 06 GOLD 0x36 * /\n        &quot; 033[0; 37m &quot;, / * 07 GREY 0x37 * /\n        &quot; 033[1; 30m &quot;, / * 08 DGREY 0x38 * /\n        &quot; 033[1; 34m &quot;, / * 09 LBLUE 0x39 * /\n        &quot; 033[1; 32m &quot;, / * 10 LGREEN 0x61 * /\n        &quot; 033[1; 36m &quot;, / * 11 LCYAN 0x62 * /\n        &quot; 033[1; 31m &quot;, / * 12 LRED 0x63 * /\n        &quot; 033[1; 35m &quot;, / * 13 LPURPLE 0x64 * /\n        &quot; 033[1; 33m &quot;, / * 14 JAUNE 0x65 * /\n        &quot; 033[1; 37m &quot;, / * 15 BLANC 0x66 * /\n    ;\n \n    si (couleur == 0) \n        fputs (&quot; 033[0m &quot;, stdout); / * ANNULER COULEUR * /\n    \n    autre\n    #fin si\n    \n        si (couleur&gt; = 0x61 &amp;&amp; couleur = 0x30 &amp;&amp; couleur Les données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                print_color (paquet-&gt; données[i])\n                continuer;\n            \n            si (paquet-&gt; données[i] == 0x0A) print_color (def_color);\n \n            putchar (paquet-&gt; données[i])\n        \n        print_color (def_color); / * annuler la coloration * /\n \n    \n    / * couleurs de bande * /\n    autre\n    \n        pour (i = 0; (unsigned char)) paquet-&gt; données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                continuer;\n            \n            putchar (paquet-&gt; données[i])\n        \n    \n \n    / * Affiche une nouvelle ligne si la chaîne n&#39;a pas de nouvelle ligne * /\n    si (paquet-&gt; données[i-1] ! = 10 &amp;&amp; packet-&gt; data[i-1] ! = 13)\n        putchar (&#39; n&#39;);"," \nrc_packet * packet_build (int id, int cmd, char * s1)\n/ * fonction hacky * /\n    paquet statique de paquetage = 0, 0, 0, 0x00;\n \n    / * taille + id + cmd + s1 + s2 terminaison NULL * /\n    int s1_len = strlen (s1);\n    if (s1_len&gt; DATA_BUFFSIZE) \n        fprintf (stderr, &quot;Avertissement: La chaîne de commande est trop longue (% d). Maximum autorisé:% d.  n&quot;, s1_len, DATA_BUFFSIZE);\n        return NULL;\n    \n \n    packet.size = sizeof (int) * 2 + s1_len + 2;\n    packet.id = id;\n    packet.cmd = cmd;\n    strncpy (packet.data, s1, DATA_BUFFSIZE);\n \n    retour et paquet;"," \nint rcon_auth (int rsock, char * passwd)","    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_AUTHENTICATE, passwd);\n    if (paquet == NULL) renvoie 0;\n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    / * retourne 1 si authentification OK * /\n    return packet-&gt; id == -1? 0: 1;"," \nint rcon_command (int rsock, char * commande)","    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_EXEC_COMMAND, commande);\n    si (paquet == NULL) \n        connexion_alive = 0;\n        retourne 0;\n    \n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    if (packet-&gt; id! = RCON_PID) renvoie 0; / * mauvais identifiant de paquet * /\n \n    si (! silent_mode) \n        / *\n        si (paquet-&gt; taille == 10) \n            printf (&quot;Commande inconnue &quot;% s  &quot;. Tapez &quot; help  &quot;ou &quot;?  &quot;pour obtenir de l&#39;aide.  n&quot;, commande);\n        \n        autre\n        * /\n        si (paquet-&gt; taille&gt; 10)\n            packet_print (packet);\n    \n \n    / * retourne 1 si le monde a été sauvé * /\n    retourne 1;"," \nint run_commands (int argc, char * argv[])","    int i, ok = 1, ret = 0;\n \n    pour (i = optind; i < argc &#038;&#038; ok; i++) \n        ok = rcon_command(rsock, argv[i]);\n        ret += ok;\n    \n \n    return ret;","/* interactive terminal mode */\nint run_terminal_mode(int rsock)","int ret = 0;\n    char command[DATA_BUFFSIZE] = 0x00;\n \n    puts(\"Logged in. Type \"Q\" to quit!\");\n \n    while(connection_alive) \n \n        int len = get_line(command, DATA_BUFFSIZE);\n        if(command[0] == 'Q' &#038;&#038; command[1] == 0) break;\n \n        if(len > 0 &amp;&amp; connection_alive) ret + = rcon_command (rsock, commande);\n \n        commander[0] = len = 0;\n    \n \n    retour ret;"," \n/ * obtient une ligne de stdin et traite les déchets laissés dans le tampon d&#39;entrée * /\nint get_line (char * buffer, int bsize)","    int ch, len;\n \n    fputs (&quot;&gt;&quot;, stdout);\n    fgets (buffer, bsize, stdin);\n \n    si (tampon[0] == 0) connection_alive = 0;\n \n    / * supprime les caractères indésirables de la mémoire tampon * /\n    tampon[strcspn(buffer, \"rn\")] = &#39; 0&#39;;\n \n    len = strlen (tampon);\n \n    / * nettoie le tampon d&#39;entrée si nécessaire * /\n    if (len == bsize - 1)\n        while ((ch = getchar ())! = &#39; n&#39; &amp;&amp; ch! = EOF);\n \n    renvoyer len;","4. C4Droid + GCC plugin (dans les paramètres de c4droid, vous devez sélectionner le compilateur: &quot;GCC + Bionic&quot;).\nDonc, vous venez de compiler ce code, allez dans le dossier: /data/data/com.n0n3m4.droidc/files/temp et copiez le fichier &quot;temp&quot; sur votre sdcard ou dans un autre dossier. Après cela, vous allez à l’entrée du terminal: &quot;/ mnt / sdcard / temp&quot; ou le chemin complet de ce fichier.\nVous pouvez également essayer de créer moi-même un fichier binaire (copiez-le simplement sur la carte SD et entrez &quot;/ mnt / sdcard / temp&quot; dans le terminal (si votre carte SD est montée dans le dossier &quot;sdcard&quot;).\nClick to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"Code:\n/ *\n* Copyright (c) 2012, Tiiffi \n*\n* Ce logiciel est fourni «en l’état», sans mention expresse ou implicite.\n* garantie. En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts\n* découlant de l&#39;utilisation de ce logiciel.\n*\n* La permission est accordée à quiconque d’utiliser ce logiciel à quelque fin que ce soit,\n* y compris les applications commerciales, et de le modifier et de le redistribuer\n* librement, sous réserve des restrictions suivantes:\n*\n* 1. L&#39;origine de ce logiciel ne doit pas être déformée; il ne faut pas\n* prétendre que vous avez écrit le logiciel original. Si vous utilisez ce logiciel\n* dans un produit, un accusé de réception dans la documentation du produit serait\n* apprécié mais n&#39;est pas obligatoire.\n*\n* 2. Les versions sources modifiées doivent être clairement indiquées comme telles et ne doivent pas être modifiées.\n* dénaturé comme étant le logiciel d&#39;origine.\n*\n* 3. Cet avis ne peut être enlevé ou modifié d&#39;aucune source\n*  Distribution.\n* /\n \n/ *\n* Nom: mcrcon (minecraft rcon)\n*\n* Licence: Licence zlib / libpng\n*\n*\n* Contact:\n* WWW: http://sourceforge.net/projects/mcrcon/\n* MAIL: tiiffi_at_gmail_dot_com\n* IRC: tiiffi @ quakenet\n*\n*\n* La description:\n* Mcrcon est un client / terminal minecraft rcon puissant avec prise en charge de la coloration bukkit.\n* Il est bien adapté à l&#39;administration à distance et à être utilisé dans le cadre de scripts de maintenance de serveur automatisée.\n* Ne provoque pas de spam &quot;IO: canal cassé&quot; ou &quot;IO: Connection reset&quot; dans la console du serveur.\n*\n*\n* Caractéristiques:\n* - Mode terminal interactif. Maintient la connexion en vie.\n* - Envoyer plusieurs commandes dans une ligne de commande.\n*  - Mode silencieux. N&#39;imprime pas la sortie rcon.\n* - Prise en charge de la coloration bukkit sous Windows et Linux (shells compatibles sh).\n* - Code multiplateforme. Compile sur de nombreuses plates-formes avec des modifications mineures.\n*\n*\n* Historique de la version:\n*\n* 0.0.5\n* - Le programme utilise la fonctionnalité C99 (tableaux de longueur variable), donc l&#39;indicateur &quot;-std = gnu99&quot; est activé\n* GCC-compiler doit être utilisé pour éviter les avertissements inutiles.\n*\n* - Le tampon de réception Rcon est maintenant plus grand (2024 octets -&gt; 10240 octets).\n* * Merci aux forums &#39;gman_ftw&#39; @ Bukkit.\n*\n* - Correction du message d&#39;erreur invalide lors de la réception d&#39;un paquet rcon vide (10 octets).\n* * Merci aux forums &#39;pkmnfrk&#39; @ bukkit.\n*\n* - Le mode terminal se ferme maintenant automatiquement lorsque rcon socket est fermé par le serveur\n* ou si la taille du paquet ne peut pas être récupérée correctement.\n*\n* - Le client essaie maintenant de nettoyer les données du socket entrant si le dernier paquet était hors spécifications.\n*\n*\n* 0.0.4\n* - Revient au gestionnaire d&#39;erreur des options getopts par défaut (opterr = 1).\n* Le gestionnaire d&#39;erreurs personnalisé nécessite une réécriture.\n* - Quelques corrections utiles dans les chaînes de sortie du programme.\n* - Utilisation du programme (); La fonction attend maintenant d’entrer avant de quitter Windows.\n*\n*\n* 0.0.3\n* - Les couleurs sont maintenant supportées sur Windows aussi!\n* - Le mode terminal est maintenant déclenché avec l&#39;indicateur &quot;-t&quot;. Le drapeau &quot;-i&quot; fonctionne toujours pour\n*    rétrocompatibilité.\n* - Corrections de bugs (vérification de la taille des paquets évaluant toujours la validité des faux et des couleurs)\n* cocher toujours évaluer vrai).\n*\n*\n* 0.0.2\n* - La licence est passée de &#39;Licence ISC&#39; à &#39;Licence zlib / libpng&#39;.\n* - Corrections de bugs et nettoyage de code\n* - Mode interactif (drapeau -i). Le client agit comme un terminal interactif.\n* - La valeur de retour du programme est maintenant le nombre de commandes rcon envoyées avec succès.\n* Si la connexion ou l&#39;authentification échoue, la valeur de retour est -1.\n* - Les couleurs sont maintenant activées par défaut. Désormais, l&#39;indicateur -c désactive le support des couleurs.\n*\n*\n* 0.0.1\n* - Ajout du support expérimental pour les couleurs de bukkit.\n* Devrait fonctionner avec n&#39;importe quel shell compatible sh.\n* - Les données de chaîne de paquets sont limitées à 2048 octets maximum (DATA_BUFFSIZE).\n* Aucune idée de la façon dont Minecraft gère plusieurs paquets rcon.\n* Si quelqu&#39;un le sait, envoyez-moi un mail afin que je puisse le mettre en œuvre.\n*\n*\n* FAIRE:\n* - Rendre le tampon de réception dynamique\n* - Changer certains problèmes de taille de paquet en erreurs fatales\n* - Nettoyage du code\n* - Vérifier les variables globales (à supprimer si possible)\n* - Ajoute quelques vérifications de protocole\n* - Nettoyage du préprocesseur (#ifdef / #ifndef)\n* - Suivre le protocole standard de valve rcon?\n* - Support de paquets multiples si Minecraft le supporte?!\n* - Recherchez si les messages de discussion du joueur sont envoyés via rcon.\n* S&#39;ils le sont, le système de messagerie nécessite une réécriture.\n*\n*\n* Rapports de bugs et demandes de fonctionnalités à tiiffi_at_gmail_dot_com.\n*\n* /\n \n \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n \n#ifdef _WIN32\n    / * pour la résolution de noms sous windows * /\n    #define _WIN32_WINNT 0x0501\n \n    #comprendre \n    #comprendre \n    #comprendre \n#autre\n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n#fin si\n \n/ * macro valeur absolue\n#define absolute (x) (x &lt;0)? (0 - x): x\n* /\n \n#define RCON_EXEC_COMMAND 2\n#define RCON_AUTHENTICATE 3\n#define RCON_RESPONSEVALUE 0\n#define RCON_AUTH_RESPONSE 2\n#define RCON_PID 42\n \n/ * Valeur sûre je pense. Cela devrait me rendre dynamique pour des performances plus stables! * /\n#define DATA_BUFFSIZE 10240\n \n#define VERSION &quot;0.0.5&quot;\n#define IN_NAME &quot;mcrcon&quot;\n#define VER_STR IN_NAME &quot;&quot; VERSION\n \n/ * structure de paquets rcon * /\ntypedef struct _rc_packet \n    taille int;\n    int id;\n    int cmd;\n    données de char[DATA_BUFFSIZE];\n    / * ignorant string2 atm .. * /\n rc_packet;\n \n/* les fonctions */\n \nerreur vide (char * errstring);\n#ifndef _WIN32\nvoid print_color (int color);\n#fin si\n \nstruct in_addr net_resolve (char * host);\nvoid net_close_socket (int sd);\nint net_open_socket (char * host, int port);\nint net_send_packet (int sd, rc_packet * packet);\nrc_packet * net_recv_packet (int sd);\n#ifdef _WIN32\nvoid net_init_WSA (void);\n#fin si\nint net_clean_incoming (int sd, taille int);\n \nrc_packet * packet_build (int id, int cmd, char * s1);\nvoid packet_print (rc_packet * packet);\n \nint rcon_auth (int rsock, char * passwd);\nint rcon_command (int rsock, char * command);\n \nint get_line (char * buffer, int len);\nint run_terminal_mode (int rsock);\nint run_commands (int argc, char * argv[])\n \n \n/ * des globals * /\nint silent_mode = 0;\nint print_colors = 1;\nint connection_alive = 1;\nchaussette; / * prise rcon * /\n \n#ifdef _WIN32\n  / * console à colorier sous windows * /\n  HANDLE console_handle;\n#fin si\n \n/ * trucs de sécurité (les fenêtres fonctionnent toujours mal) * /\nvoid exit_proc (void) \n    if (rsock! = -1) net_close_socket (rsock);","html":"<p>Code:\n/ *\n* Copyright (c) 2012, Tiiffi \n*\n* Ce logiciel est fourni «en l’état», sans mention expresse ou implicite.\n* garantie. En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts\n* découlant de l&#039;utilisation de ce logiciel.\n*\n* La permission est accordée à quiconque d’utiliser ce logiciel à quelque fin que ce soit,\n* y compris les applications commerciales, et de le modifier et de le redistribuer\n* librement, sous réserve des restrictions suivantes:\n*\n* 1. L&#039;origine de ce logiciel ne doit pas être déformée; il ne faut pas\n* prétendre que vous avez écrit le logiciel original. Si vous utilisez ce logiciel\n* dans un produit, un accusé de réception dans la documentation du produit serait\n* apprécié mais n&#039;est pas obligatoire.\n*\n* 2. Les versions sources modifiées doivent être clairement indiquées comme telles et ne doivent pas être modifiées.\n* dénaturé comme étant le logiciel d&#039;origine.\n*\n* 3. Cet avis ne peut être enlevé ou modifié d&#039;aucune source\n*  Distribution.\n* /\n \n/ *\n* Nom: mcrcon (minecraft rcon)\n*\n* Licence: Licence zlib / libpng\n*\n*\n* Contact:\n* WWW: http://sourceforge.net/projects/mcrcon/\n* MAIL: tiiffi_at_gmail_dot_com\n* IRC: tiiffi @ quakenet\n*\n*\n* La description:\n* Mcrcon est un client / terminal minecraft rcon puissant avec prise en charge de la coloration bukkit.\n* Il est bien adapté à l&#039;administration à distance et à être utilisé dans le cadre de scripts de maintenance de serveur automatisée.\n* Ne provoque pas de spam &quot;IO: canal cassé&quot; ou &quot;IO: Connection reset&quot; dans la console du serveur.\n*\n*\n* Caractéristiques:\n* - Mode terminal interactif. Maintient la connexion en vie.\n* - Envoyer plusieurs commandes dans une ligne de commande.\n*  - Mode silencieux. N&#039;imprime pas la sortie rcon.\n* - Prise en charge de la coloration bukkit sous Windows et Linux (shells compatibles sh).\n* - Code multiplateforme. Compile sur de nombreuses plates-formes avec des modifications mineures.\n*\n*\n* Historique de la version:\n*\n* 0.0.5\n* - Le programme utilise la fonctionnalité C99 (tableaux de longueur variable), donc l&#039;indicateur &quot;-std = gnu99&quot; est activé\n* GCC-compiler doit être utilisé pour éviter les avertissements inutiles.\n*\n* - Le tampon de réception Rcon est maintenant plus grand (2024 octets -&gt; 10240 octets).\n* * Merci aux forums &#039;gman_ftw&#039; @ Bukkit.\n*\n* - Correction du message d&#039;erreur invalide lors de la réception d&#039;un paquet rcon vide (10 octets).\n* * Merci aux forums &#039;pkmnfrk&#039; @ bukkit.\n*\n* - Le mode terminal se ferme maintenant automatiquement lorsque rcon socket est fermé par le serveur\n* ou si la taille du paquet ne peut pas être récupérée correctement.\n*\n* - Le client essaie maintenant de nettoyer les données du socket entrant si le dernier paquet était hors spécifications.\n*\n*\n* 0.0.4\n* - Revient au gestionnaire d&#039;erreur des options getopts par défaut (opterr = 1).\n* Le gestionnaire d&#039;erreurs personnalisé nécessite une réécriture.\n* - Quelques corrections utiles dans les chaînes de sortie du programme.\n* - Utilisation du programme (); La fonction attend maintenant d’entrer avant de quitter Windows.\n*\n*\n* 0.0.3\n* - Les couleurs sont maintenant supportées sur Windows aussi!\n* - Le mode terminal est maintenant déclenché avec l&#039;indicateur &quot;-t&quot;. Le drapeau &quot;-i&quot; fonctionne toujours pour\n*    rétrocompatibilité.\n* - Corrections de bugs (vérification de la taille des paquets évaluant toujours la validité des faux et des couleurs)\n* cocher toujours évaluer vrai).\n*\n*\n* 0.0.2\n* - La licence est passée de &#039;Licence ISC&#039; à &#039;Licence zlib / libpng&#039;.\n* - Corrections de bugs et nettoyage de code\n* - Mode interactif (drapeau -i). Le client agit comme un terminal interactif.\n* - La valeur de retour du programme est maintenant le nombre de commandes rcon envoyées avec succès.\n* Si la connexion ou l&#039;authentification échoue, la valeur de retour est -1.\n* - Les couleurs sont maintenant activées par défaut. Désormais, l&#039;indicateur -c désactive le support des couleurs.\n*\n*\n* 0.0.1\n* - Ajout du support expérimental pour les couleurs de bukkit.\n* Devrait fonctionner avec n&#039;importe quel shell compatible sh.\n* - Les données de chaîne de paquets sont limitées à 2048 octets maximum (DATA_BUFFSIZE).\n* Aucune idée de la façon dont Minecraft gère plusieurs paquets rcon.\n* Si quelqu&#039;un le sait, envoyez-moi un mail afin que je puisse le mettre en œuvre.\n*\n*\n* FAIRE:\n* - Rendre le tampon de réception dynamique\n* - Changer certains problèmes de taille de paquet en erreurs fatales\n* - Nettoyage du code\n* - Vérifier les variables globales (à supprimer si possible)\n* - Ajoute quelques vérifications de protocole\n* - Nettoyage du préprocesseur (#ifdef / #ifndef)\n* - Suivre le protocole standard de valve rcon?\n* - Support de paquets multiples si Minecraft le supporte?!\n* - Recherchez si les messages de discussion du joueur sont envoyés via rcon.\n* S&#039;ils le sont, le système de messagerie nécessite une réécriture.\n*\n*\n* Rapports de bugs et demandes de fonctionnalités à tiiffi_at_gmail_dot_com.\n*\n* /\n \n \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n \n#ifdef _WIN32\n    / * pour la résolution de noms sous windows * /\n    #define _WIN32_WINNT 0x0501\n \n    #comprendre \n    #comprendre \n    #comprendre \n#autre\n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n#fin si\n \n/ * macro valeur absolue\n#define absolute (x) (x &lt;0)? (0 - x): x\n* /\n \n#define RCON_EXEC_COMMAND 2\n#define RCON_AUTHENTICATE 3\n#define RCON_RESPONSEVALUE 0\n#define RCON_AUTH_RESPONSE 2\n#define RCON_PID 42\n \n/ * Valeur sûre je pense. Cela devrait me rendre dynamique pour des performances plus stables! * /\n#define DATA_BUFFSIZE 10240\n \n#define VERSION &quot;0.0.5&quot;\n#define IN_NAME &quot;mcrcon&quot;\n#define VER_STR IN_NAME &quot;&quot; VERSION\n \n/ * structure de paquets rcon * /\ntypedef struct _rc_packet \n    taille int;\n    int id;\n    int cmd;\n    données de char[DATA_BUFFSIZE];\n    / * ignorant string2 atm .. * /\n rc_packet;\n \n/* les fonctions */\n \nerreur vide (char * errstring);\n#ifndef _WIN32\nvoid print_color (int color);\n#fin si\n \nstruct in_addr net_resolve (char * host);\nvoid net_close_socket (int sd);\nint net_open_socket (char * host, int port);\nint net_send_packet (int sd, rc_packet * packet);\nrc_packet * net_recv_packet (int sd);\n#ifdef _WIN32\nvoid net_init_WSA (void);\n#fin si\nint net_clean_incoming (int sd, taille int);\n \nrc_packet * packet_build (int id, int cmd, char * s1);\nvoid packet_print (rc_packet * packet);\n \nint rcon_auth (int rsock, char * passwd);\nint rcon_command (int rsock, char * command);\n \nint get_line (char * buffer, int len);\nint run_terminal_mode (int rsock);\nint run_commands (int argc, char * argv[])\n \n \n/ * des globals * /\nint silent_mode = 0;\nint print_colors = 1;\nint connection_alive = 1;\nchaussette; / * prise rcon * /\n \n#ifdef _WIN32\n  / * console à colorier sous windows * /\n  HANDLE console_handle;\n#fin si\n \n/ * trucs de sécurité (les fenêtres fonctionnent toujours mal) * /\nvoid exit_proc (void) \n    if (rsock! = -1) net_close_socket (rsock);</p>"},{"id":"text-2","type":"text","heading":"","plain_text":" \n/ * Vérifiez le comportement de windows et linux !!! * /\nvoid sighandler (int sig) \n    connexion_alive = 0;\n    #ifndef _WIN32\n      sortie (-1);\n    #fin si","html":"<p> \n/ * Vérifiez le comportement de windows et linux !!! * /\nvoid sighandler (int sig) \n    connexion_alive = 0;\n    #ifndef _WIN32\n      sortie (-1);\n    #fin si</p>"},{"id":"text-3","type":"text","heading":"","plain_text":" \nint principal (int argc, char * argv[])","html":"<p> \nint principal (int argc, char * argv[])</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"    int opt, ret = 0;\n    int terminal_mode = 1;\n \n    char * host = &quot;192.168.1.3&quot;;\n    char * pass = &quot;123456&quot;;\n    int port = 25575;\n \n \n \n    opterr = 1; / * gestionnaire d&#39;erreurs par défaut activé * /\n    while ((opt = getopt (argc, argv, &quot;tcshH: p: p: i&quot;))!! = -1)\n    \n        commutateur (opt)\n        \n            cas &#39;H&#39;: hôte = optarg; Pause;\n            cas &#39;P&#39;: port = atoi (optarg); Pause;\n            cas &#39;p&#39;: pass = optarg; Pause;\n            cas &#39;C&#39;:\n            case &#39;c&#39;: print_colors = 0; Pause;\n            cas &#39;s&#39;:\n            case &#39;s&#39;: silent_mode = 1; Pause;\n            cas &#39;T&#39;:\n            cas &#39;t&#39;:\n            cas &#39;je&#39;:\n            case &#39;i&#39;: terminal_mode = 1; Pause;\n            cas &#39;h&#39;:\n            Cas &#39;?&#39;:\n                / *\n                if (optopt == &#39;P&#39; \n    \n \n    if (hôte == NULL) \n        fputs (&quot;Hôte non défini. Indicateur de vérification -H.  n  n&quot;, stdout);\n \n    \n \n    si (port ai_addr;\n \n    adresse = sockaddr_ipv4-&gt; sin_addr;\n \n    freeaddrinfo (résultat);\n \n    adresse de retour;","html":"<p>    int opt, ret = 0;\n    int terminal_mode = 1;\n \n    char * host = &quot;192.168.1.3&quot;;\n    char * pass = &quot;123456&quot;;\n    int port = 25575;\n \n \n \n    opterr = 1; / * gestionnaire d&#039;erreurs par défaut activé * /\n    while ((opt = getopt (argc, argv, &quot;tcshH: p: p: i&quot;))!! = -1)\n    \n        commutateur (opt)\n        \n            cas &#039;H&#039;: hôte = optarg; Pause;\n            cas &#039;P&#039;: port = atoi (optarg); Pause;\n            cas &#039;p&#039;: pass = optarg; Pause;\n            cas &#039;C&#039;:\n            case &#039;c&#039;: print_colors = 0; Pause;\n            cas &#039;s&#039;:\n            case &#039;s&#039;: silent_mode = 1; Pause;\n            cas &#039;T&#039;:\n            cas &#039;t&#039;:\n            cas &#039;je&#039;:\n            case &#039;i&#039;: terminal_mode = 1; Pause;\n            cas &#039;h&#039;:\n            Cas &#039;?&#039;:\n                / *\n                if (optopt == &#039;P&#039; \n    \n \n    if (hôte == NULL) \n        fputs (&quot;Hôte non défini. Indicateur de vérification -H.  n  n&quot;, stdout);\n \n    \n \n    si (port ai_addr;\n \n    adresse = sockaddr_ipv4-&gt; sin_addr;\n \n    freeaddrinfo (résultat);\n \n    adresse de retour;</p>"},{"id":"text-5","type":"text","heading":"","plain_text":" \n/ * socket close and cleanup * /\nvoid net_close_socket (int sd)","html":"<p> \n/ * socket close and cleanup * /\nvoid net_close_socket (int sd)</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"    #ifdef _WIN32\n        closesocket (sd);\n        WSACleanup ();\n    #autre\n        fermer (sd);\n    #fin si","html":"<p>    #ifdef _WIN32\n        closesocket (sd);\n        WSACleanup ();\n    #autre\n        fermer (sd);\n    #fin si</p>"},{"id":"text-7","type":"text","heading":"","plain_text":" \n/ * Ouvre et connecte prise * /\nint net_open_socket (char * host, int port)","html":"<p> \n/ * Ouvre et connecte prise * /\nint net_open_socket (char * host, int port)</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"    int sd;\n    struct sockaddr_in sa;\n \n    memset (&amp; sa, 0, sizeof (sa)); / * Définit la structure pleine de zéros. * /\n    sa.sin_family = AF_INET; / * Adresse Famille Inet = Protocole Famille Inet. * /\n    sa.sin_port = htons (port); /* Numéro de port. * /\n    sa.sin_addr = net_resolve (hôte); / * résolvez l&#39;hôte. * /\n \n    if ((sd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP))) < 0)\n    \n        #ifdef _WIN32\n            WSACleanup();\n        #endif\n        error(\"Error: cannot create socket.n\");\n    \n \n    if(connect(sd, (struct sockaddr *)&#038;sa, sizeof(sa)) != 0)\n    \n        net_close_socket(sd);\n        fprintf(stderr, \"Error: connection failed (%s).n\", host);\n        exit(-1);\n    \n \n    return sd;","html":"<p>    int sd;\n    struct sockaddr_in sa;\n \n    memset (&amp; sa, 0, sizeof (sa)); / * Définit la structure pleine de zéros. * /\n    sa.sin_family = AF_INET; / * Adresse Famille Inet = Protocole Famille Inet. * /\n    sa.sin_port = htons (port); /* Numéro de port. * /\n    sa.sin_addr = net_resolve (hôte); / * résolvez l&#039;hôte. * /\n \n    if ((sd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP))) &lt; 0)\n    \n        #ifdef _WIN32\n            WSACleanup();\n        #endif\n        error(&quot;Error: cannot create socket.n&quot;);\n    \n \n    if(connect(sd, (struct sockaddr *)&#038;sa, sizeof(sa)) != 0)\n    \n        net_close_socket(sd);\n        fprintf(stderr, &quot;Error: connection failed (%s).n&quot;, host);\n        exit(-1);\n    \n \n    return sd;</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"int net_send_packet(int sd, rc_packet *packet)","html":"<p>int net_send_packet(int sd, rc_packet *packet)</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"int len;\n    int total = 0;        /* how many bytes we've sent */\n    int bytesleft;        /* how many we have left to send */\n    int ret = -1;\n \n    bytesleft = len = packet->taille + taillede (int);\n \n    tandis que (total &lt;len)\n    \n        ret = send (sd, (char *) packet + total, bytesleft, 0);\n        if (ret == -1) break; \n        total + = ret;\n        bytesleft - = ret;\n    \n \n    / * retourne -1 en cas d&#39;échec, 0 en cas de succès * /\n    Retourner Ret == -1? -1: 1;","html":"<p>int len;\n    int total = 0;        /* how many bytes we&#039;ve sent */\n    int bytesleft;        /* how many we have left to send */\n    int ret = -1;\n \n    bytesleft = len = packet-&gt;taille + taillede (int);\n \n    tandis que (total &lt;len)\n    \n        ret = send (sd, (char *) packet + total, bytesleft, 0);\n        if (ret == -1) break; \n        total + = ret;\n        bytesleft - = ret;\n    \n \n    / * retourne -1 en cas d&#039;échec, 0 en cas de succès * /\n    Retourner Ret == -1? -1: 1;</p>"},{"id":"text-11","type":"text","heading":"","plain_text":" \nrc_packet * net_recv_packet (int sd)","html":"<p> \nrc_packet * net_recv_packet (int sd)</p>"},{"id":"text-12","type":"text","heading":"","plain_text":" \nint net_clean_incoming (int sd, int size)","html":"<p> \nint net_clean_incoming (int sd, int size)</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"    char tmp[size];\n \n    int ret = recv (sd, tmp, taille, 0);\n \n    si (ret == 0) \n        fprintf (stderr, &quot;Connexion perdue.  n&quot;);\n        connexion_alive = 0;\n    \n \n    retour ret;","html":"<p>    char tmp[size];\n \n    int ret = recv (sd, tmp, taille, 0);\n \n    si (ret == 0) \n        fprintf (stderr, &quot;Connexion perdue.  n&quot;);\n        connexion_alive = 0;\n    \n \n    retour ret;</p>"},{"id":"text-14","type":"text","heading":"","plain_text":" \nvoid print_color (int color)","html":"<p> \nvoid print_color (int color)</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"    / * palette de couleurs compatible sh * /\n    #ifndef _WIN32\n    char * couleurs[] = \n        &quot; 033[0; 30m &quot;, / * 00 BLACK 0x30 * /\n        &quot; 033[0; 34m &quot;, / * 01 BLEU 0x31 * /\n        &quot; 033[0; 32m &quot;, / * 02 GREEN 0x32 * /\n        &quot; 033[0; 36m &quot;, / * 03 CYAN 0x33 * /\n        &quot; 033[0; 31m &quot;, / * 04 RED 0x34 * /\n        &quot; 033[0; 35m &quot;, / * 05 PURPLE 0x35 * /\n        &quot; 033[0; 33m &quot;, / * 06 GOLD 0x36 * /\n        &quot; 033[0; 37m &quot;, / * 07 GREY 0x37 * /\n        &quot; 033[1; 30m &quot;, / * 08 DGREY 0x38 * /\n        &quot; 033[1; 34m &quot;, / * 09 LBLUE 0x39 * /\n        &quot; 033[1; 32m &quot;, / * 10 LGREEN 0x61 * /\n        &quot; 033[1; 36m &quot;, / * 11 LCYAN 0x62 * /\n        &quot; 033[1; 31m &quot;, / * 12 LRED 0x63 * /\n        &quot; 033[1; 35m &quot;, / * 13 LPURPLE 0x64 * /\n        &quot; 033[1; 33m &quot;, / * 14 JAUNE 0x65 * /\n        &quot; 033[1; 37m &quot;, / * 15 BLANC 0x66 * /\n    ;\n \n    si (couleur == 0) \n        fputs (&quot; 033[0m &quot;, stdout); / * ANNULER COULEUR * /\n    \n    autre\n    #fin si\n    \n        si (couleur&gt; = 0x61 &amp;&amp; couleur = 0x30 &amp;&amp; couleur Les données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                print_color (paquet-&gt; données[i])\n                continuer;\n            \n            si (paquet-&gt; données[i] == 0x0A) print_color (def_color);\n \n            putchar (paquet-&gt; données[i])\n        \n        print_color (def_color); / * annuler la coloration * /\n \n    \n    / * couleurs de bande * /\n    autre\n    \n        pour (i = 0; (unsigned char)) paquet-&gt; données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                continuer;\n            \n            putchar (paquet-&gt; données[i])\n        \n    \n \n    / * Affiche une nouvelle ligne si la chaîne n&#39;a pas de nouvelle ligne * /\n    si (paquet-&gt; données[i-1] ! = 10 &amp;&amp; packet-&gt; data[i-1] ! = 13)\n        putchar (&#39; n&#39;);","html":"<p>    / * palette de couleurs compatible sh * /\n    #ifndef _WIN32\n    char * couleurs[] = \n        &quot; 033[0; 30m &quot;, / * 00 BLACK 0x30 * /\n        &quot; 033[0; 34m &quot;, / * 01 BLEU 0x31 * /\n        &quot; 033[0; 32m &quot;, / * 02 GREEN 0x32 * /\n        &quot; 033[0; 36m &quot;, / * 03 CYAN 0x33 * /\n        &quot; 033[0; 31m &quot;, / * 04 RED 0x34 * /\n        &quot; 033[0; 35m &quot;, / * 05 PURPLE 0x35 * /\n        &quot; 033[0; 33m &quot;, / * 06 GOLD 0x36 * /\n        &quot; 033[0; 37m &quot;, / * 07 GREY 0x37 * /\n        &quot; 033[1; 30m &quot;, / * 08 DGREY 0x38 * /\n        &quot; 033[1; 34m &quot;, / * 09 LBLUE 0x39 * /\n        &quot; 033[1; 32m &quot;, / * 10 LGREEN 0x61 * /\n        &quot; 033[1; 36m &quot;, / * 11 LCYAN 0x62 * /\n        &quot; 033[1; 31m &quot;, / * 12 LRED 0x63 * /\n        &quot; 033[1; 35m &quot;, / * 13 LPURPLE 0x64 * /\n        &quot; 033[1; 33m &quot;, / * 14 JAUNE 0x65 * /\n        &quot; 033[1; 37m &quot;, / * 15 BLANC 0x66 * /\n    ;\n \n    si (couleur == 0) \n        fputs (&quot; 033[0m &quot;, stdout); / * ANNULER COULEUR * /\n    \n    autre\n    #fin si\n    \n        si (couleur&gt; = 0x61 &amp;&amp; couleur = 0x30 &amp;&amp; couleur Les données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                print_color (paquet-&gt; données[i])\n                continuer;\n            \n            si (paquet-&gt; données[i] == 0x0A) print_color (def_color);\n \n            putchar (paquet-&gt; données[i])\n        \n        print_color (def_color); / * annuler la coloration * /\n \n    \n    / * couleurs de bande * /\n    autre\n    \n        pour (i = 0; (unsigned char)) paquet-&gt; données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                continuer;\n            \n            putchar (paquet-&gt; données[i])\n        \n    \n \n    / * Affiche une nouvelle ligne si la chaîne n&#039;a pas de nouvelle ligne * /\n    si (paquet-&gt; données[i-1] ! = 10 &amp;&amp; packet-&gt; data[i-1] ! = 13)\n        putchar (&#039; n&#039;);</p>"},{"id":"text-16","type":"text","heading":"","plain_text":" \nrc_packet * packet_build (int id, int cmd, char * s1)\n/ * fonction hacky * /\n    paquet statique de paquetage = 0, 0, 0, 0x00;\n \n    / * taille + id + cmd + s1 + s2 terminaison NULL * /\n    int s1_len = strlen (s1);\n    if (s1_len&gt; DATA_BUFFSIZE) \n        fprintf (stderr, &quot;Avertissement: La chaîne de commande est trop longue (% d). Maximum autorisé:% d.  n&quot;, s1_len, DATA_BUFFSIZE);\n        return NULL;\n    \n \n    packet.size = sizeof (int) * 2 + s1_len + 2;\n    packet.id = id;\n    packet.cmd = cmd;\n    strncpy (packet.data, s1, DATA_BUFFSIZE);\n \n    retour et paquet;","html":"<p> \nrc_packet * packet_build (int id, int cmd, char * s1)\n/ * fonction hacky * /\n    paquet statique de paquetage = 0, 0, 0, 0x00;\n \n    / * taille + id + cmd + s1 + s2 terminaison NULL * /\n    int s1_len = strlen (s1);\n    if (s1_len&gt; DATA_BUFFSIZE) \n        fprintf (stderr, &quot;Avertissement: La chaîne de commande est trop longue (% d). Maximum autorisé:% d.  n&quot;, s1_len, DATA_BUFFSIZE);\n        return NULL;\n    \n \n    packet.size = sizeof (int) * 2 + s1_len + 2;\n    packet.id = id;\n    packet.cmd = cmd;\n    strncpy (packet.data, s1, DATA_BUFFSIZE);\n \n    retour et paquet;</p>"},{"id":"text-17","type":"text","heading":"","plain_text":" \nint rcon_auth (int rsock, char * passwd)","html":"<p> \nint rcon_auth (int rsock, char * passwd)</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_AUTHENTICATE, passwd);\n    if (paquet == NULL) renvoie 0;\n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    / * retourne 1 si authentification OK * /\n    return packet-&gt; id == -1? 0: 1;","html":"<p>    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_AUTHENTICATE, passwd);\n    if (paquet == NULL) renvoie 0;\n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#039;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    / * retourne 1 si authentification OK * /\n    return packet-&gt; id == -1? 0: 1;</p>"},{"id":"text-19","type":"text","heading":"","plain_text":" \nint rcon_command (int rsock, char * commande)","html":"<p> \nint rcon_command (int rsock, char * commande)</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_EXEC_COMMAND, commande);\n    si (paquet == NULL) \n        connexion_alive = 0;\n        retourne 0;\n    \n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    if (packet-&gt; id! = RCON_PID) renvoie 0; / * mauvais identifiant de paquet * /\n \n    si (! silent_mode) \n        / *\n        si (paquet-&gt; taille == 10) \n            printf (&quot;Commande inconnue &quot;% s  &quot;. Tapez &quot; help  &quot;ou &quot;?  &quot;pour obtenir de l&#39;aide.  n&quot;, commande);\n        \n        autre\n        * /\n        si (paquet-&gt; taille&gt; 10)\n            packet_print (packet);\n    \n \n    / * retourne 1 si le monde a été sauvé * /\n    retourne 1;","html":"<p>    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_EXEC_COMMAND, commande);\n    si (paquet == NULL) \n        connexion_alive = 0;\n        retourne 0;\n    \n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#039;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    if (packet-&gt; id! = RCON_PID) renvoie 0; / * mauvais identifiant de paquet * /\n \n    si (! silent_mode) \n        / *\n        si (paquet-&gt; taille == 10) \n            printf (&quot;Commande inconnue &quot;% s  &quot;. Tapez &quot; help  &quot;ou &quot;?  &quot;pour obtenir de l&#039;aide.  n&quot;, commande);\n        \n        autre\n        * /\n        si (paquet-&gt; taille&gt; 10)\n            packet_print (packet);\n    \n \n    / * retourne 1 si le monde a été sauvé * /\n    retourne 1;</p>"},{"id":"text-21","type":"text","heading":"","plain_text":" \nint run_commands (int argc, char * argv[])","html":"<p> \nint run_commands (int argc, char * argv[])</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"    int i, ok = 1, ret = 0;\n \n    pour (i = optind; i < argc &#038;&#038; ok; i++) \n        ok = rcon_command(rsock, argv[i]);\n        ret += ok;\n    \n \n    return ret;","html":"<p>    int i, ok = 1, ret = 0;\n \n    pour (i = optind; i &lt; argc &#038;&#038; ok; i++) \n        ok = rcon_command(rsock, argv[i]);\n        ret += ok;\n    \n \n    return ret;</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"/* interactive terminal mode */\nint run_terminal_mode(int rsock)","html":"<p>/* interactive terminal mode */\nint run_terminal_mode(int rsock)</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"int ret = 0;\n    char command[DATA_BUFFSIZE] = 0x00;\n \n    puts(\"Logged in. Type \"Q\" to quit!\");\n \n    while(connection_alive) \n \n        int len = get_line(command, DATA_BUFFSIZE);\n        if(command[0] == 'Q' &#038;&#038; command[1] == 0) break;\n \n        if(len > 0 &amp;&amp; connection_alive) ret + = rcon_command (rsock, commande);\n \n        commander[0] = len = 0;\n    \n \n    retour ret;","html":"<p>int ret = 0;\n    char command[DATA_BUFFSIZE] = 0x00;\n \n    puts(&quot;Logged in. Type &quot;Q&quot; to quit!&quot;);\n \n    while(connection_alive) \n \n        int len = get_line(command, DATA_BUFFSIZE);\n        if(command[0] == &#039;Q&#039; &#038;&#038; command[1] == 0) break;\n \n        if(len &gt; 0 &amp;&amp; connection_alive) ret + = rcon_command (rsock, commande);\n \n        commander[0] = len = 0;\n    \n \n    retour ret;</p>"},{"id":"text-25","type":"text","heading":"","plain_text":" \n/ * obtient une ligne de stdin et traite les déchets laissés dans le tampon d&#39;entrée * /\nint get_line (char * buffer, int bsize)","html":"<p> \n/ * obtient une ligne de stdin et traite les déchets laissés dans le tampon d&#039;entrée * /\nint get_line (char * buffer, int bsize)</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"    int ch, len;\n \n    fputs (&quot;&gt;&quot;, stdout);\n    fgets (buffer, bsize, stdin);\n \n    si (tampon[0] == 0) connection_alive = 0;\n \n    / * supprime les caractères indésirables de la mémoire tampon * /\n    tampon[strcspn(buffer, \"rn\")] = &#39; 0&#39;;\n \n    len = strlen (tampon);\n \n    / * nettoie le tampon d&#39;entrée si nécessaire * /\n    if (len == bsize - 1)\n        while ((ch = getchar ())! = &#39; n&#39; &amp;&amp; ch! = EOF);\n \n    renvoyer len;","html":"<p>    int ch, len;\n \n    fputs (&quot;&gt;&quot;, stdout);\n    fgets (buffer, bsize, stdin);\n \n    si (tampon[0] == 0) connection_alive = 0;\n \n    / * supprime les caractères indésirables de la mémoire tampon * /\n    tampon[strcspn(buffer, &quot;rn&quot;)] = &#039; 0&#039;;\n \n    len = strlen (tampon);\n \n    / * nettoie le tampon d&#039;entrée si nécessaire * /\n    if (len == bsize - 1)\n        while ((ch = getchar ())! = &#039; n&#039; &amp;&amp; ch! = EOF);\n \n    renvoyer len;</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"4. C4Droid + GCC plugin (dans les paramètres de c4droid, vous devez sélectionner le compilateur: &quot;GCC + Bionic&quot;).\nDonc, vous venez de compiler ce code, allez dans le dossier: /data/data/com.n0n3m4.droidc/files/temp et copiez le fichier &quot;temp&quot; sur votre sdcard ou dans un autre dossier. Après cela, vous allez à l’entrée du terminal: &quot;/ mnt / sdcard / temp&quot; ou le chemin complet de ce fichier.\nVous pouvez également essayer de créer moi-même un fichier binaire (copiez-le simplement sur la carte SD et entrez &quot;/ mnt / sdcard / temp&quot; dans le terminal (si votre carte SD est montée dans le dossier &quot;sdcard&quot;).\nClick to rate this post!\n                                   \n                               [Total: 0  Average: 0]","html":"<p>4. C4Droid + GCC plugin (dans les paramètres de c4droid, vous devez sélectionner le compilateur: &quot;GCC + Bionic&quot;).\nDonc, vous venez de compiler ce code, allez dans le dossier: /data/data/com.n0n3m4.droidc/files/temp et copiez le fichier &quot;temp&quot; sur votre sdcard ou dans un autre dossier. Après cela, vous allez à l’entrée du terminal: &quot;/ mnt / sdcard / temp&quot; ou le chemin complet de ce fichier.\nVous pouvez également essayer de créer moi-même un fichier binaire (copiez-le simplement sur la carte SD et entrez &quot;/ mnt / sdcard / temp&quot; dans le terminal (si votre carte SD est montée dans le dossier &quot;sdcard&quot;).\nClick to rate this post!\n                                   \n                               [Total: 0  Average: 0]</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"Code:\n/ *\n* Copyright (c) 2012, Tiiffi \n*\n* Ce logiciel est fourni «en l’état», sans mention expresse ou implicite.\n* garantie. En aucun cas, les auteurs ne pourront être tenus responsables de dommages et intérêts\n* découlant de l&#39;utilisation de ce logiciel.\n*\n* La permission est accordée à quiconque d’utiliser ce logiciel à quelque fin que ce soit,\n* y compris les applications commerciales, et de le modifier et de le redistribuer\n* librement, sous réserve des restrictions suivantes:\n*\n* 1. L&#39;origine de ce logiciel ne doit pas être déformée; il ne faut pas\n* prétendre que vous avez écrit le logiciel original. Si vous utilisez ce logiciel\n* dans un produit, un accusé de réception dans la documentation du produit serait\n* apprécié mais n&#39;est pas obligatoire.\n*\n* 2. Les versions sources modifiées doivent être clairement indiquées comme telles et ne doivent pas être modifiées.\n* dénaturé comme étant le logiciel d&#39;origine.\n*\n* 3. Cet avis ne peut être enlevé ou modifié d&#39;aucune source\n*  Distribution.\n* /\n \n/ *\n* Nom: mcrcon (minecraft rcon)\n*\n* Licence: Licence zlib / libpng\n*\n*\n* Contact:\n* WWW: http://sourceforge.net/projects/mcrcon/\n* MAIL: tiiffi_at_gmail_dot_com\n* IRC: tiiffi @ quakenet\n*\n*\n* La description:\n* Mcrcon est un client / terminal minecraft rcon puissant avec prise en charge de la coloration bukkit.\n* Il est bien adapté à l&#39;administration à distance et à être utilisé dans le cadre de scripts de maintenance de serveur automatisée.\n* Ne provoque pas de spam &quot;IO: canal cassé&quot; ou &quot;IO: Connection reset&quot; dans la console du serveur.\n*\n*\n* Caractéristiques:\n* - Mode terminal interactif. Maintient la connexion en vie.\n* - Envoyer plusieurs commandes dans une ligne de commande.\n*  - Mode silencieux. N&#39;imprime pas la sortie rcon.\n* - Prise en charge de la coloration bukkit sous Windows et Linux (shells compatibles sh).\n* - Code multiplateforme. Compile sur de nombreuses plates-formes avec des modifications mineures.\n*\n*\n* Historique de la version:\n*\n* 0.0.5\n* - Le programme utilise la fonctionnalité C99 (tableaux de longueur variable), donc l&#39;indicateur &quot;-std = gnu99&quot; est activé\n* GCC-compiler doit être utilisé pour éviter les avertissements inutiles.\n*\n* - Le tampon de réception Rcon est maintenant plus grand (2024 octets -&gt; 10240 octets).\n* * Merci aux forums &#39;gman_ftw&#39; @ Bukkit.\n*\n* - Correction du message d&#39;erreur invalide lors de la réception d&#39;un paquet rcon vide (10 octets).\n* * Merci aux forums &#39;pkmnfrk&#39; @ bukkit.\n*\n* - Le mode terminal se ferme maintenant automatiquement lorsque rcon socket est fermé par le serveur\n* ou si la taille du paquet ne peut pas être récupérée correctement.\n*\n* - Le client essaie maintenant de nettoyer les données du socket entrant si le dernier paquet était hors spécifications.\n*\n*\n* 0.0.4\n* - Revient au gestionnaire d&#39;erreur des options getopts par défaut (opterr = 1).\n* Le gestionnaire d&#39;erreurs personnalisé nécessite une réécriture.\n* - Quelques corrections utiles dans les chaînes de sortie du programme.\n* - Utilisation du programme (); La fonction attend maintenant d’entrer avant de quitter Windows.\n*\n*\n* 0.0.3\n* - Les couleurs sont maintenant supportées sur Windows aussi!\n* - Le mode terminal est maintenant déclenché avec l&#39;indicateur &quot;-t&quot;. Le drapeau &quot;-i&quot; fonctionne toujours pour\n*    rétrocompatibilité.\n* - Corrections de bugs (vérification de la taille des paquets évaluant toujours la validité des faux et des couleurs)\n* cocher toujours évaluer vrai).\n*\n*\n* 0.0.2\n* - La licence est passée de &#39;Licence ISC&#39; à &#39;Licence zlib / libpng&#39;.\n* - Corrections de bugs et nettoyage de code\n* - Mode interactif (drapeau -i). Le client agit comme un terminal interactif.\n* - La valeur de retour du programme est maintenant le nombre de commandes rcon envoyées avec succès.\n* Si la connexion ou l&#39;authentification échoue, la valeur de retour est -1.\n* - Les couleurs sont maintenant activées par défaut. Désormais, l&#39;indicateur -c désactive le support des couleurs.\n*\n*\n* 0.0.1\n* - Ajout du support expérimental pour les couleurs de bukkit.\n* Devrait fonctionner avec n&#39;importe quel shell compatible sh.\n* - Les données de chaîne de paquets sont limitées à 2048 octets maximum (DATA_BUFFSIZE).\n* Aucune idée de la façon dont Minecraft gère plusieurs paquets rcon.\n* Si quelqu&#39;un le sait, envoyez-moi un mail afin que je puisse le mettre en œuvre.\n*\n*\n* FAIRE:\n* - Rendre le tampon de réception dynamique\n* - Changer certains problèmes de taille de paquet en erreurs fatales\n* - Nettoyage du code\n* - Vérifier les variables globales (à supprimer si possible)\n* - Ajoute quelques vérifications de protocole\n* - Nettoyage du préprocesseur (#ifdef / #ifndef)\n* - Suivre le protocole standard de valve rcon?\n* - Support de paquets multiples si Minecraft le supporte?!\n* - Recherchez si les messages de discussion du joueur sont envoyés via rcon.\n* S&#39;ils le sont, le système de messagerie nécessite une réécriture.\n*\n*\n* Rapports de bugs et demandes de fonctionnalités à tiiffi_at_gmail_dot_com.\n*\n* /\n \n \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n#comprendre \n \n#ifdef _WIN32\n    / * pour la résolution de noms sous windows * /\n    #define _WIN32_WINNT 0x0501\n \n    #comprendre \n    #comprendre \n    #comprendre \n#autre\n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n    #comprendre \n#fin si\n \n/ * macro valeur absolue\n#define absolute (x) (x &lt;0)? (0 - x): x\n* /\n \n#define RCON_EXEC_COMMAND 2\n#define RCON_AUTHENTICATE 3\n#define RCON_RESPONSEVALUE 0\n#define RCON_AUTH_RESPONSE 2\n#define RCON_PID 42\n \n/ * Valeur sûre je pense. Cela devrait me rendre dynamique pour des performances plus stables! * /\n#define DATA_BUFFSIZE 10240\n \n#define VERSION &quot;0.0.5&quot;\n#define IN_NAME &quot;mcrcon&quot;\n#define VER_STR IN_NAME &quot;&quot; VERSION\n \n/ * structure de paquets rcon * /\ntypedef struct _rc_packet \n    taille int;\n    int id;\n    int cmd;\n    données de char[DATA_BUFFSIZE];\n    / * ignorant string2 atm .. * /\n rc_packet;\n \n/* les fonctions */\n \nerreur vide (char * errstring);\n#ifndef _WIN32\nvoid print_color (int color);\n#fin si\n \nstruct in_addr net_resolve (char * host);\nvoid net_close_socket (int sd);\nint net_open_socket (char * host, int port);\nint net_send_packet (int sd, rc_packet * packet);\nrc_packet * net_recv_packet (int sd);\n#ifdef _WIN32\nvoid net_init_WSA (void);\n#fin si\nint net_clean_incoming (int sd, taille int);\n \nrc_packet * packet_build (int id, int cmd, char * s1);\nvoid packet_print (rc_packet * packet);\n \nint rcon_auth (int rsock, char * passwd);\nint rcon_command (int rsock, char * command);\n \nint get_line (char * buffer, int len);\nint run_terminal_mode (int rsock);\nint run_commands (int argc, char * argv[])\n \n \n/ * des globals * /\nint silent_mode = 0;\nint print_colors = 1;\nint connection_alive = 1;\nchaussette; / * prise rcon * /\n \n#ifdef _WIN32\n  / * console à colorier sous windows * /\n  HANDLE console_handle;\n#fin si\n \n/ * trucs de sécurité (les fenêtres fonctionnent toujours mal) * /\nvoid exit_proc (void) \n    if (rsock! = -1) net_close_socket (rsock);"},{"id":"text-2","heading":"Text","content":" \n/ * Vérifiez le comportement de windows et linux !!! * /\nvoid sighandler (int sig) \n    connexion_alive = 0;\n    #ifndef _WIN32\n      sortie (-1);\n    #fin si"},{"id":"text-3","heading":"Text","content":" \nint principal (int argc, char * argv[])"},{"id":"text-4","heading":"Text","content":"    int opt, ret = 0;\n    int terminal_mode = 1;\n \n    char * host = &quot;192.168.1.3&quot;;\n    char * pass = &quot;123456&quot;;\n    int port = 25575;\n \n \n \n    opterr = 1; / * gestionnaire d&#39;erreurs par défaut activé * /\n    while ((opt = getopt (argc, argv, &quot;tcshH: p: p: i&quot;))!! = -1)\n    \n        commutateur (opt)\n        \n            cas &#39;H&#39;: hôte = optarg; Pause;\n            cas &#39;P&#39;: port = atoi (optarg); Pause;\n            cas &#39;p&#39;: pass = optarg; Pause;\n            cas &#39;C&#39;:\n            case &#39;c&#39;: print_colors = 0; Pause;\n            cas &#39;s&#39;:\n            case &#39;s&#39;: silent_mode = 1; Pause;\n            cas &#39;T&#39;:\n            cas &#39;t&#39;:\n            cas &#39;je&#39;:\n            case &#39;i&#39;: terminal_mode = 1; Pause;\n            cas &#39;h&#39;:\n            Cas &#39;?&#39;:\n                / *\n                if (optopt == &#39;P&#39; \n    \n \n    if (hôte == NULL) \n        fputs (&quot;Hôte non défini. Indicateur de vérification -H.  n  n&quot;, stdout);\n \n    \n \n    si (port ai_addr;\n \n    adresse = sockaddr_ipv4-&gt; sin_addr;\n \n    freeaddrinfo (résultat);\n \n    adresse de retour;"},{"id":"text-5","heading":"Text","content":" \n/ * socket close and cleanup * /\nvoid net_close_socket (int sd)"},{"id":"text-6","heading":"Text","content":"    #ifdef _WIN32\n        closesocket (sd);\n        WSACleanup ();\n    #autre\n        fermer (sd);\n    #fin si"},{"id":"text-7","heading":"Text","content":" \n/ * Ouvre et connecte prise * /\nint net_open_socket (char * host, int port)"},{"id":"text-8","heading":"Text","content":"    int sd;\n    struct sockaddr_in sa;\n \n    memset (&amp; sa, 0, sizeof (sa)); / * Définit la structure pleine de zéros. * /\n    sa.sin_family = AF_INET; / * Adresse Famille Inet = Protocole Famille Inet. * /\n    sa.sin_port = htons (port); /* Numéro de port. * /\n    sa.sin_addr = net_resolve (hôte); / * résolvez l&#39;hôte. * /\n \n    if ((sd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP))) < 0)\n    \n        #ifdef _WIN32\n            WSACleanup();\n        #endif\n        error(\"Error: cannot create socket.n\");\n    \n \n    if(connect(sd, (struct sockaddr *)&#038;sa, sizeof(sa)) != 0)\n    \n        net_close_socket(sd);\n        fprintf(stderr, \"Error: connection failed (%s).n\", host);\n        exit(-1);\n    \n \n    return sd;"},{"id":"text-9","heading":"Text","content":"int net_send_packet(int sd, rc_packet *packet)"},{"id":"text-10","heading":"Text","content":"int len;\n    int total = 0;        /* how many bytes we've sent */\n    int bytesleft;        /* how many we have left to send */\n    int ret = -1;\n \n    bytesleft = len = packet->taille + taillede (int);\n \n    tandis que (total &lt;len)\n    \n        ret = send (sd, (char *) packet + total, bytesleft, 0);\n        if (ret == -1) break; \n        total + = ret;\n        bytesleft - = ret;\n    \n \n    / * retourne -1 en cas d&#39;échec, 0 en cas de succès * /\n    Retourner Ret == -1? -1: 1;"},{"id":"text-11","heading":"Text","content":" \nrc_packet * net_recv_packet (int sd)"},{"id":"text-12","heading":"Text","content":" \nint net_clean_incoming (int sd, int size)"},{"id":"text-13","heading":"Text","content":"    char tmp[size];\n \n    int ret = recv (sd, tmp, taille, 0);\n \n    si (ret == 0) \n        fprintf (stderr, &quot;Connexion perdue.  n&quot;);\n        connexion_alive = 0;\n    \n \n    retour ret;"},{"id":"text-14","heading":"Text","content":" \nvoid print_color (int color)"},{"id":"text-15","heading":"Text","content":"    / * palette de couleurs compatible sh * /\n    #ifndef _WIN32\n    char * couleurs[] = \n        &quot; 033[0; 30m &quot;, / * 00 BLACK 0x30 * /\n        &quot; 033[0; 34m &quot;, / * 01 BLEU 0x31 * /\n        &quot; 033[0; 32m &quot;, / * 02 GREEN 0x32 * /\n        &quot; 033[0; 36m &quot;, / * 03 CYAN 0x33 * /\n        &quot; 033[0; 31m &quot;, / * 04 RED 0x34 * /\n        &quot; 033[0; 35m &quot;, / * 05 PURPLE 0x35 * /\n        &quot; 033[0; 33m &quot;, / * 06 GOLD 0x36 * /\n        &quot; 033[0; 37m &quot;, / * 07 GREY 0x37 * /\n        &quot; 033[1; 30m &quot;, / * 08 DGREY 0x38 * /\n        &quot; 033[1; 34m &quot;, / * 09 LBLUE 0x39 * /\n        &quot; 033[1; 32m &quot;, / * 10 LGREEN 0x61 * /\n        &quot; 033[1; 36m &quot;, / * 11 LCYAN 0x62 * /\n        &quot; 033[1; 31m &quot;, / * 12 LRED 0x63 * /\n        &quot; 033[1; 35m &quot;, / * 13 LPURPLE 0x64 * /\n        &quot; 033[1; 33m &quot;, / * 14 JAUNE 0x65 * /\n        &quot; 033[1; 37m &quot;, / * 15 BLANC 0x66 * /\n    ;\n \n    si (couleur == 0) \n        fputs (&quot; 033[0m &quot;, stdout); / * ANNULER COULEUR * /\n    \n    autre\n    #fin si\n    \n        si (couleur&gt; = 0x61 &amp;&amp; couleur = 0x30 &amp;&amp; couleur Les données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                print_color (paquet-&gt; données[i])\n                continuer;\n            \n            si (paquet-&gt; données[i] == 0x0A) print_color (def_color);\n \n            putchar (paquet-&gt; données[i])\n        \n        print_color (def_color); / * annuler la coloration * /\n \n    \n    / * couleurs de bande * /\n    autre\n    \n        pour (i = 0; (unsigned char)) paquet-&gt; données[i] ! = 0; ++ i) \n            if ((unsigned char) packet -&gt; data[i] == 0xa7) \n                ++ i;\n                continuer;\n            \n            putchar (paquet-&gt; données[i])\n        \n    \n \n    / * Affiche une nouvelle ligne si la chaîne n&#39;a pas de nouvelle ligne * /\n    si (paquet-&gt; données[i-1] ! = 10 &amp;&amp; packet-&gt; data[i-1] ! = 13)\n        putchar (&#39; n&#39;);"},{"id":"text-16","heading":"Text","content":" \nrc_packet * packet_build (int id, int cmd, char * s1)\n/ * fonction hacky * /\n    paquet statique de paquetage = 0, 0, 0, 0x00;\n \n    / * taille + id + cmd + s1 + s2 terminaison NULL * /\n    int s1_len = strlen (s1);\n    if (s1_len&gt; DATA_BUFFSIZE) \n        fprintf (stderr, &quot;Avertissement: La chaîne de commande est trop longue (% d). Maximum autorisé:% d.  n&quot;, s1_len, DATA_BUFFSIZE);\n        return NULL;\n    \n \n    packet.size = sizeof (int) * 2 + s1_len + 2;\n    packet.id = id;\n    packet.cmd = cmd;\n    strncpy (packet.data, s1, DATA_BUFFSIZE);\n \n    retour et paquet;"},{"id":"text-17","heading":"Text","content":" \nint rcon_auth (int rsock, char * passwd)"},{"id":"text-18","heading":"Text","content":"    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_AUTHENTICATE, passwd);\n    if (paquet == NULL) renvoie 0;\n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    / * retourne 1 si authentification OK * /\n    return packet-&gt; id == -1? 0: 1;"},{"id":"text-19","heading":"Text","content":" \nint rcon_command (int rsock, char * commande)"},{"id":"text-20","heading":"Text","content":"    int ret;\n \n    rc_packet * packet = packet_build (RCON_PID, RCON_EXEC_COMMAND, commande);\n    si (paquet == NULL) \n        connexion_alive = 0;\n        retourne 0;\n    \n \n    ret = net_send_packet (rsock, packet);\n    si (! ret) retourne 0; /* Echec de l&#39;envoi */\n \n    packet = net_recv_packet (rsock);\n    if (paquet == NULL) renvoie 0;\n \n    if (packet-&gt; id! = RCON_PID) renvoie 0; / * mauvais identifiant de paquet * /\n \n    si (! silent_mode) \n        / *\n        si (paquet-&gt; taille == 10) \n            printf (&quot;Commande inconnue &quot;% s  &quot;. Tapez &quot; help  &quot;ou &quot;?  &quot;pour obtenir de l&#39;aide.  n&quot;, commande);\n        \n        autre\n        * /\n        si (paquet-&gt; taille&gt; 10)\n            packet_print (packet);\n    \n \n    / * retourne 1 si le monde a été sauvé * /\n    retourne 1;"},{"id":"text-21","heading":"Text","content":" \nint run_commands (int argc, char * argv[])"},{"id":"text-22","heading":"Text","content":"    int i, ok = 1, ret = 0;\n \n    pour (i = optind; i < argc &#038;&#038; ok; i++) \n        ok = rcon_command(rsock, argv[i]);\n        ret += ok;\n    \n \n    return ret;"},{"id":"text-23","heading":"Text","content":"/* interactive terminal mode */\nint run_terminal_mode(int rsock)"},{"id":"text-24","heading":"Text","content":"int ret = 0;\n    char command[DATA_BUFFSIZE] = 0x00;\n \n    puts(\"Logged in. Type \"Q\" to quit!\");\n \n    while(connection_alive) \n \n        int len = get_line(command, DATA_BUFFSIZE);\n        if(command[0] == 'Q' &#038;&#038; command[1] == 0) break;\n \n        if(len > 0 &amp;&amp; connection_alive) ret + = rcon_command (rsock, commande);\n \n        commander[0] = len = 0;\n    \n \n    retour ret;"},{"id":"text-25","heading":"Text","content":" \n/ * obtient une ligne de stdin et traite les déchets laissés dans le tampon d&#39;entrée * /\nint get_line (char * buffer, int bsize)"},{"id":"text-26","heading":"Text","content":"    int ch, len;\n \n    fputs (&quot;&gt;&quot;, stdout);\n    fgets (buffer, bsize, stdin);\n \n    si (tampon[0] == 0) connection_alive = 0;\n \n    / * supprime les caractères indésirables de la mémoire tampon * /\n    tampon[strcspn(buffer, \"rn\")] = &#39; 0&#39;;\n \n    len = strlen (tampon);\n \n    / * nettoie le tampon d&#39;entrée si nécessaire * /\n    if (len == bsize - 1)\n        while ((ch = getchar ())! = &#39; n&#39; &amp;&amp; ch! = EOF);\n \n    renvoyer len;"},{"id":"text-27","heading":"Text","content":"4. C4Droid + GCC plugin (dans les paramètres de c4droid, vous devez sélectionner le compilateur: &quot;GCC + Bionic&quot;).\nDonc, vous venez de compiler ce code, allez dans le dossier: /data/data/com.n0n3m4.droidc/files/temp et copiez le fichier &quot;temp&quot; sur votre sdcard ou dans un autre dossier. Après cela, vous allez à l’entrée du terminal: &quot;/ mnt / sdcard / temp&quot; ou le chemin complet de ce fichier.\nVous pouvez également essayer de créer moi-même un fichier binaire (copiez-le simplement sur la carte SD et entrez &quot;/ mnt / sdcard / temp&quot; dans le terminal (si votre carte SD est montée dans le dossier &quot;sdcard&quot;).\nClick to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":""},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/05/03/adminrcon-mcrcon-client-de-connexion-a-distance-pour-les-serveurs-minecraft-resoudre-les-problemes-dun-serveur-minecraft/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/05/03/adminrcon-mcrcon-client-de-connexion-a-distance-pour-les-serveurs-minecraft-resoudre-les-problemes-dun-serveur-minecraft/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/05/03/adminrcon-mcrcon-client-de-connexion-a-distance-pour-les-serveurs-minecraft-resoudre-les-problemes-dun-serveur-minecraft/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}