CRYPTER UN IP! (LISEZ CA VA ÊTRE PLUS PRÉCIS...)

Samoul - 25 nov. 2001 à 04:11
wagonda Messages postés 1 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 3 mai 2006 - 3 mai 2006 à 17:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9333-crypter-un-ip-lisez-ca-va-etre-plus-precis

wagonda Messages postés 1 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 3 mai 2006
3 mai 2006 à 17:09
L'interet c'est de ne pas inclure la winsock...
et c'est d'un grand interet sur WINCE par exemple...
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
24 sept. 2004 à 09:01
tient,, lol,, javais pas vu plus haut que tu avais donné la meme solution que moi.
cs_ThreaT Messages postés 3 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 3 août 2005
23 sept. 2004 à 10:26
La seul chose qui pourais donner un interet à ce post, serais de recreer la fonction inet_addr() pour en voir le detail.

du style :

---- snip ----

long __cdecl MyFuckingInet_addr(unsigned char *data)
{
char temp[16], cIP[3], *p;
DWORD dwIpConverted = 0;
BYTE sIP = 0;
int i = 0;

lstrcpy( temp, data );
p = strtok( temp, "." );

while( p && i < 4 )
{
lstrcpy( cIP, p );
sIP = atoi( cIP );

memcpy( (BYTE *)&dwIpConverted + i, (BYTE *)&sIP , 1);
p = strtok( NULL, ".");
i++;
}

return dwIpConverted;
}
------------------------

voila, comme sa, j'espère que tous le monde est content.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
22 sept. 2004 à 18:58
heu,,je suis pas sur, jai pas verifié, mais il me semble que lequivalent de ta fonction soit :


unsigned long ip = inet_add("127.0.0.1");
BaFM Messages postés 64 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 26 novembre 2009
1 oct. 2003 à 19:32
Allez tiens, j'ai envie, vé réécrire avec ma façon :)
Vais vous faire une petite classe de convertion...

----------------IPConvert.h-------------------------
#ifndef IPCONVERT_H
#define IPCONVERT_H

//Déclaration de la class de convertion d'IP chaîne en entier long ou tableau de quatre octets
class CIPConvert
{
private:
union {
unsigned char uc [4];
unsigned long dw;
} m_IP;

public:
//Constructeur par défaut
CIPConvert ();
//Constructeur par copie
CIPConvert (const CIPConvert &);
//Constructeur par convertion de chaîne
CIPConvert (const char *);
//Constructeur par initialisation avec un entier long non signé
CIPConvert (const unsigned long);
//Constructeur par initialisation des 4 valeurs
CIPConvert (const unsigned char,
const unsigned char,
const unsigned char,
const unsigned char);

//Affectation par convertion de chaîne de caractère représentant l'IP
CIPConvert & operator = (const char *);
//Affectation de copie
CIPConvert & operator = (const CIPConvert &);
//Convertion de l'IP en chaîne
operator char * ();
//Retour de l'entier long non signé
operator unsigned long ();
//Prise des octets séparément par indexation
unsigned char operator [] (int);
};

#endif//IPCONVERT_H

#endif//IPCONVERT_H

----------------IPConvert.cpp-----------------------
#include <stdlib.h>
#include <string.h>
#include "IPCONV.H"

CIPConvert::CIPConvert ()
{
m_IP.dw = 0;
}

CIPConvert::CIPConvert (const CIPConvert &ip)
{
m_IP.dw = ip.m_IP.dw;
}

CIPConvert::CIPConvert (const char * strIP)
{
*this = strIP;
}

CIPConvert::CIPConvert (const unsigned long dw)
{
m_IP.dw = dw;
}

CIPConvert::CIPConvert (const unsigned char uc0,
const unsigned char uc1,
const unsigned char uc2,
const unsigned char uc3)
{
m_IP.uc [0] = uc0;
m_IP.uc [1] = uc1;
m_IP.uc [2] = uc2;
m_IP.uc [3] = uc3;
}

//Précondition : strIP doit être une IP bien formatée
CIPConvert & CIPConvert::operator = (const char * strIP)
{
long iPoints [3]; //Tableau contenant la position des points
//Recherche du premier point et calcul de la position suivante
iPoints [0] = (const char*)strchr (strIP, '.') - strIP + 1;
//Au minimum un chiffre
if (iPoints [0] < 2)
//Je sait c'est as bien de faire un goto
//mais j'ai pas envie d'avoir de multiples niveaux
goto convertend;
iPoints [1] = (const char*)strchr (strIP + iPoints [0], '.') - strIP + 1;
if (iPoints [1] < 2)
goto convertend;
iPoints [2] = (const char*)strchr (strIP + iPoints [1], '.') - strIP + 1;
if (iPoints [2] < 2)
goto convertend;
//C'est bon, il y a le compte de points
//On peux donc convertir en nombre
//NB : Forcage en unsigned char pour virer le warning
m_IP.uc [0] = (unsigned char)atoi (strIP);
m_IP.uc [1] = (unsigned char)atoi (strIP + iPoints [0]);
m_IP.uc [2] = (unsigned char)atoi (strIP + iPoints [1]);
m_IP.uc [3] = (unsigned char)atoi (strIP + iPoints [2]);
convertend:
return *this;
}

CIPConvert & CIPConvert::operator = (const CIPConvert & ip)
{
m_IP.dw = ip.m_IP.dw;
return *this;
}

//Note : l'appelant doit libérer la chaine crée. (operateur new []/delete [])
CIPConvert::operator char * ()
{
char *strValue = new char [16]; //Adresse IP
char *strTemp = new char [4]; //Temporaire pour le nombre
int i; //Compteur
strValue [0] = 0; //Premier caractère est terminal pour utilisation de strCat
for (i = 0;i < 4;i ++)
{
strcat (strValue, itoa (m_IP.uc [i], strTemp, 10));
if (i < 3)
strcat (strValue, ".");
}
delete [] strTemp;
return strValue;
}

CIPConvert::operator unsigned long ()
{
return m_IP.dw;
}

unsigned char CIPConvert::operator [] (int i)
{
if ((i >= 0) && (i < 4))
return m_IP.uc [i];
else
return 0;
}

-----------------------------------------
Compilation OK sous Borland C++ 3.1
Exécution non testée mais je suis certain que ca devrait fonctionner ;)
nonokao Messages postés 6 Date d'inscription mercredi 13 novembre 2002 Statut Membre Dernière intervention 1 octobre 2003
1 oct. 2003 à 03:34
oullla ! keske j'fais ici ! je croyais tombé sur un chti prog de ouf ! ben shui po déçu, lol, nan jme moque po, j'avais juste oublié ke moi aussi un jour shui passé par la case départ ;) Bref, clair k'il y a plein de façon d'écrire ton chti prog, de la pire à la meilleur ! lol
j'aime bien la proposition qui casse tout, de ThreaT (toré kan même pu mettre qlq commentaires) en plus vérifier l'ip avec inet_addr() raccourci amplement le nombre de lignes de code.
BaFM Messages postés 64 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 26 novembre 2009
5 mars 2003 à 16:49
pourkoi pas utiliser cette structure :
union IP
{
BYTE b[4];
DWORD dw;
};
pour faire la "convertion" ?

pour l'adresse en texte, tu recherche la position des points et tu converti pour mettre au bon endroit et même po besoin de faire d'addition ! ni de multiplication pour avoir la valeur totale ! ^^
Samoul Messages postés 12 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 11 juin 2005
23 janv. 2003 à 03:42
J'avoue que ton prog a du bon lol! C'est beaucoup plus simple parconte le mieux te permet de comprendre le fonctionement! Donc 2 choses différentes mais utiles! Et fuck you le pd qui dit que jfait des fautes!
cs_ThreaT Messages postés 3 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 3 août 2005
23 janv. 2003 à 02:06
bonjour,

je sais que mon intervention risque d'être mal venue, mais pourquoi
ce prendre la tête alors qu'il t'aurais suffi d'ecrire un truc de ce style pour réaliser un programme similaire :

-------- snip ------
/*
* compile with cl source.c /link wsock32.lib
*/

#include <stdio.h>
#include <winsock.h>

void main (int argc, char *argv[])
{

unsigned long IPconvert;

if (!argv[1])
{
printf ("usage %s
",argv[0]);
exit (1);
}

IPconvert = inet_addr (argv[1]);

if (IPconvert == INADDR_NONE)
printf ("Mauvaise adresse IP !
");
else
printf ("L'IP converti en LONG non signe est : %u
",ntohl (IPconvert));

printf ("pas de quoi en faire tout un fromage :-p
");
}

------ snip -----

E:code>cl toto.c /link wsock32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

toto.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:toto.exe
wsock32.lib
toto.obj

E:code>toto 10.0.0.1
L'IP converti en LONG non signe est : 167772161
pas de quoi en faire tout un fromage :-p

E:code>ping 167772161

Envoi d'une requête 'ping' sur 10.0.0.1 avec 32 octets de données :

Réponse de 10.0.0.1 : octets=32 temps<10 ms TTL=128
Réponse de 10.0.0.1 : octets=32 temps<10 ms TTL=128
Réponse de 10.0.0.1 : octets=32 temps<10 ms TTL=128
Réponse de 10.0.0.1 : octets=32 temps<10 ms TTL=128

Statistiques Ping pour 10.0.0.1:
Paquets : envoyés 4, reçus 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
minimum 0ms, maximum 0ms, moyenne = 0ms

E:code>

cette remarque etait juste la pour appuyer en quelque sorte la remarque de toto, car tu me donne l'impression de ne pas l'avoir comprise.

mais bon, je me trompe peut être...

++
Eh, sérieux, si tu vas encore à l'école, essaie que ça te serve au moins à qque chose : APPRENDS A ECRIRE FRANCAIS SANS FAUTES A TOUS LES MOTS !!!
Merci...
Au fait MOI AUSSI J'AI 15ANS ET A 15 ANS JE SOUTIENT SAMOUL, ON A PAS TROP DE TEMPS surtout avec 9.6 de moyenne LOL !!! Bonne continuation à tous !
JE VEUX FAIRE PART A TOUT CPPFRANCE D'UNE FAIBLESSE DE VISUAL C++ :
Si l'include #include "stdafx.h"
N'est pas AU TOUT DEBUT du prog eh ben ça plante !!!!
JE VEUX FAIRE PART A TOUT CPPFRANCE D'UNE FAIBLESSE DE VISUAL C++ :
Si l'include #include "stdafx.h"
N'est pas AU TOUT DEBUT du prog eh ben ça plante !!!!
Je te remerci beaucoup pour ton commentaire! J'aurait bien aimer en faire usage mais vois tu je commence le Cpp chui rendu a la page 100 de mon livre de 1300 page ... Allors je ne comprend pas vraiment tout ce que tu as dit mais il y as de bonne chance que dans quelque mois je comprenne... J'ai 15 ans et je vais a l'écolle allors je n'ai pas beaucoup de temp héhé!
salut a toi, je suis entrain de voir ton programme et je voudrais te donner quelque conseil entre amis tu peux le suivre comme tu peux carement t'en passer se comme tu veux :
le cpp est un language different de c , quand je te vois mettre de synthaxe de cpp sans passer par de classe ,je me dit que ton programme, tu aurais mieux fait de le faire en c car tu passe a coter de chose tres elementaire du cpp. pour recrire un programme qui est fais en c vers c++,il ne faut pas changer que le synthax mais la facon de voir la structure de ton programme exemple:encapsulation ,heritage,template etc.. meme si ce un petit programme , j'aurais fais une petite classe avec de variable membre ip et de methode qui l'utilise, bref,je te donne simplement mon avis , que tu le suit ou pas , sa changeras rien pour moi.
si tu veux me donner ton opinion ,je suis sur irc #programmeur nick beos´.

je te souhaite une bonne soiré.
Merci Socrate et toto je sais c'Est voulue! Le but c'est pas de faire une clef d'encryption! C'est de faire comprendre le principe des entier long comme tu le dit!
Juste une remarque ..
int ip1 0, ip2 0, ip3 = 0, ip4 = 0, iptotal = 0
serait plus approprié.
Je suis con, je m'appelle toto. Mais je crois que ton prog convertit seulement l'IP en entier long. Et c'est cette conversion qu'on utilise dans tous les programmes TCP/IP. C'est pour ça que l'on peut utiliser ton IP "crypté" pour faire un ping.
Voila, c'était un message de toto l'idiot.
>Boby009 :
j'utilise VC++ comme toi et tout marche tres bien en incluant iostream et stdafx
Salut
Peut etre que vous utilisezz tout simplement pas le meme compilateur et c'est pour cela que l'un des ompilateur lui a besoin de la lib stdafx.h qui je croi est propre a VC++, alors que l'autre en a pas besoin
Bob je ne sais pas pourquoi il faut que tu rajoute cette librairie mais moi seulement avec iostream je suis corecte et tout marche! Et merci Jo pour ton commentaire je vais changer ca!
Boby009 NeoMorph
25 nov. 2001 à 13:51
moi j'ai un blem : il faut que je rajoute l'include :<stdafx.h> et quand je la rajoute ça me fait :
--------------------Configuration: ConsoleSTRUCT - Win32 Debug--------------------
Compiling...
ConsoleSTRUCT.cpp
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(11) : error C2065: 'cout' : undeclared identifier
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(11) : error C2297: '<<' : illegal, right operand has type 'char [45]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(17) : error C2297: '<<' : illegal, right operand has type 'char [61]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(18) : error C2065: 'cin' : undeclared identifier
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(18) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(21) : error C2297: '<<' : illegal, right operand has type 'char [44]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(22) : error C2065: 'endl' : undeclared identifier
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(22) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(23) : error C2297: '<<' : illegal, right operand has type 'char [61]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(24) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(32) : error C2297: '<<' : illegal, right operand has type 'char [61]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(33) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(36) : error C2297: '<<' : illegal, right operand has type 'char [44]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(37) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(38) : error C2297: '<<' : illegal, right operand has type 'char [61]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(39) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(47) : error C2297: '<<' : illegal, right operand has type 'char [62]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(48) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(51) : error C2297: '<<' : illegal, right operand has type 'char [44]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(52) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(53) : error C2297: '<<' : illegal, right operand has type 'char [62]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(54) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(62) : error C2297: '<<' : illegal, right operand has type 'char [62]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(63) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(66) : error C2297: '<<' : illegal, right operand has type 'char [44]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(67) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(68) : error C2297: '<<' : illegal, right operand has type 'char [62]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(69) : warning C4552: '>>' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(74) : error C2297: '<<' : illegal, right operand has type 'char [23]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(75) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(76) : error C2297: '<<' : illegal, right operand has type 'char [2]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(77) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(78) : error C2297: '<<' : illegal, right operand has type 'char [2]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(79) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(80) : error C2297: '<<' : illegal, right operand has type 'char [2]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(81) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(82) : error C2297: '<<' : illegal, right operand has type 'char [2]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(91) : error C2297: '<<' : illegal, right operand has type 'char [20]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(92) : warning C4552: '<<' : operator has no effect; expected operator with side-effect
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(93) : error C2297: '<<' : illegal, right operand has type 'char [3]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(95) : error C2297: '<<' : illegal, right operand has type 'char [2]'
C:Program FilesMicrosoft Visual StudioMyProjectsConsoleSTRUCTConsoleSTRUCT.cpp(96) : error C2297: '<<' : illegal, right operand has type 'char [70]'
Error executing cl.exe.

ConsoleSTRUCT.exe - 25 error(s), 17 warning(s)

On peut m'aider ??
Salut,
petite remarque; tu utilise trop endl inutiliement car je te rappelle qu'un endl fait un retour chariot mais aussi un fflush(); et toi tu en fait trop souvent plutot que de mettre
il ne sert a rien de faire des fflush(); aussi souvent que tu le fait dans ton programme, il n'est meme pas utile dans un utiliser du tout dans ton programme
J'allai oublier n'hésitez pas a lesser un petit commentaire ca fait toujours très plaisir!
Rejoignez-nous