Recuperer ip internet

Résolu
cs_shadrak Messages postés 5 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 9 août 2015 - 2 sept. 2006 à 19:59
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 3 sept. 2006 à 20:20
Bonjour, je cherche le moyen de recuperer une Ip Internet, sous delphi 4, j ai bien trouvé plusieurs examples mais tous utilisent du code non compatible D4.MErci.

19 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 sept. 2006 à 22:30
salut,
dans le programme WEBCam IP j'ai mis une fonction qui récupère l'IP (il y a 4 possibilités):
function TFServer.GetLocalIp: string;
var HTMLSource:string;
wsaData: TWSAData;
addr: TSockAddrIn;
Phe: PHostEnt;
szHostName: array[0..128] of Char;
BeginDelimit,EndDelimit:integer;
begin
if RadioButton1.Checked then
begin
try
try
if WSAStartup($101, WSAData) <> 0 then
raise Exception.Create('Cannot initialize WSA');
try
if GetHostName(szHostName, 128) <> SOCKET_ERROR then
begin
Phe := GetHostByName(szHostName);
if Assigned(Phe) then
begin
addr.sin_addr.S_addr := longint(plongint(Phe^.h_addr_list^)^);
Result := inet_ntoa(addr.sin_addr);
end;
end;
finally
WSACleanup;
end;
except
on e:Exception do begin
Result:='Error: '+e.Message;
raise;
end else
raise;
end;
finally
//StaticText1.Caption:='Automatic Ip detection: '+Result;
end;
end;
if RadioButton2.Checked then
begin
Try
HTMLSource:=IdHTTP1.Get('http://checkip.dyndns.org/');
delete(HTMLSource,1,pos(':',HTMLSource)+1);
delete(HTMLSource,pos('<',HTMLSource),80);
result:=HTMLSource;
Except
// Result:=false;
end;
end;
if RadioButton3.Checked then
Try
result:=IdHTTP1.Get('http://filezilla.sourceforge.net/misc/ip.php');
Except
// Result:=false;
end;
if RadioButton4.Checked then
begin
Try
HTMLSource:= IdHTTP1.Get('http://www.showmyip.com/fr/'); //On demande le contenu de la page et on le récupère dans HTMLSource
BeginDelimit:=length(Copy(HTMLSource,1, Pos('Internet',HTMLSource)+ 9 ) );//);76 ,77
EndDelimit:=length(Copy(HTMLSource,Pos('-->',HTMLSource)-1,Length(HTMLSource)));
Result:=Copy(HTMLSource,BeginDelimit,Length(HTMLSource)-BeginDelimit-EndDelimit+1); //On extrait l'adresse IP de HTMLSource
Except
// Result:=false;
end;
end;
IPServer.Text:=Result;//'Automatic Ip detection: '
end;
Il y en a peut être une qui fonctionne sous D4 mais je n'ai pas testé

@+
jlen
0
cs_shadrak Messages postés 5 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 9 août 2015
2 sept. 2006 à 22:57
non, aucun de ces codes n est compatible D4, j ai besoin de l  ip internet et pas de l ip locale.Beaucoup de monde semble chercher cette fonction.

Mon compilateur ne reconnais pas TWSAData comme type de donnée.Donc, impossible pour moi de tester les sources utilisant ceci.
0
Utilisateur anonyme
3 sept. 2006 à 00:40
SAlut

Shadral : JLen te propose de récupérer l'adresse Internet :
HTMLSource:= IdHTTP1.Get('http://www.showmyip.com/fr/');
Tu récupère l'adresse IP qui est dans le souce de la page html de l'url :www.showmyip.com.

En aucune façon tu récupère ici l'IP Local.

Si D4 ne reconnait pas TWSAData, il y a surement l'équivalent. Sinon rien t'mpeche de récupérer D2005 qui est gratuit. Il y a donc bel et bien une solution à ton probleme.
0
Utilisateur anonyme
3 sept. 2006 à 00:41
Ah oui : petit truc aussi, ce n'est pas ton OS qui t'attribue ton IP Internet mais ton FAI. Donc trouver une API me semble impossible.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 sept. 2006 à 07:11
D4 cimmence à être sérieusement obslète il seraittemps de passer à un e version plus récente
0
cs_shadrak Messages postés 5 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 9 août 2015
3 sept. 2006 à 09:38
ok pour le source de Japee, ca marche, merci.Mais j ai pensé que ce serais vraiment plus simple.Apres tout quand on ouvre la connexion reseau puis proprieté de la connexion, il affiche bien l ip.Elle doit donc bien se trouver quelque part dans le systeme... Delphi 2005 est gratuit mais la diffusion de programmes est interdite alors je ne vois pas trop l interet.
0
Utilisateur anonyme
3 sept. 2006 à 10:25
salut

@Japee : La partie HTMLSource:= IdHTTP1.Get('http://www.showmyip.com/fr/'); consiste à se connecter sur www.showmyip.com et récupérer l'adresse IP internet comme tu l'as souligné ^^.

@Shadrak : Avec D2005 personnel tu as le droit de diffuser tes softs mais tu n'as pas les droits de les vendre comme avec D4(il me semble).

@+
0
cs_shadrak Messages postés 5 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 9 août 2015
3 sept. 2006 à 10:35
@Frankie: Le probleme c 'est que je les vends.Et je le fait avec D4 depuis quelques années deja.Je pense avoir droit de les vendre ou alors j ai mal lu la licence. Je l ai pourtant acheté, pas telechargé.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 sept. 2006 à 10:46
l'adresse IP ne se trouve pas dans le système A la connexion c'est ton FAi qui te transmet l'adresse mais elle n'est pas stockée (peut être voir le fichier ini du programme de connexion? ) et encore celà dépend du FAI donc si tu veux que ton programme soit "universel" tu dois récupérer l'adresse IP sur le net ( en fait quand tu te connectes à un site HTTP l'adresse en envoyée dans l'en-tête de la requête)

@+
jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 sept. 2006 à 12:54
Salut,

D4 ou D2005 à partir du moment ou tu as acheté le produit avec les licences tu as le droit de vendre tes softs ...

Ensuite dire que D4 est obsolète c'est peut être un peut fort

Personnellement je préfère un D4 Pro (avec licences) que n'importe quel version personnel ultérieur

En suite un code réalisé sous D4 fonctionnera sous D6, D7 et D2005 mais l'inverse est moins évidant.

Et pour finir les derniers codes que j'ai postés ici ont étés fait avec D4 et je ne pense pas qu'ils aient perdus de l'interêt pour autant !

@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 sept. 2006 à 13:40
salut cirec

un code réalisé sous D4 ne fonctionne pas forcément sous les versions postérieures
il existe des différence notables entre les versions pour exemple il a fallut reclarer ceratine variable et mettre une compilation conditionnelle pour que directdraw se compile pas sous D7 et D2005 , le code de jappee ne se compile pas sous D2005 (fastnet n'existe plus) pour les nouveaux développement il vaut mieux passer par INDY

@+
jlen
0
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
3 sept. 2006 à 13:52
Salut,

Et on retombe dans ce grand débat...

@+
 Matt

<hr size="2" width="100%" />La paresse est la mère du génie...
http://www.delphilab.com
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 sept. 2006 à 14:11
C'est le problème de l'évolution des logiciels en particulier au niveau internet
pour le code de jappee il faudrait regarder pour remplacer fastnet par INDY ce qui au niveau HTTP client ne devrait pas être trop compliqué
en restant sur des versions anciennes on se condamne à ne plus bénéficier des avancées (quelques fois utiles mais parfois contestables ...)
D4 à du sortir avant 2000 et en 6/8 ans il s'est passé pas mal de choses y compris pour facilité le développement des projets. Quand on développe pour commercialiser les gains de temps sur le développement compensent largement le coût d'achat d'une nouvelle licence.

@+
jlen
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
3 sept. 2006 à 14:12
Salut,


Je suis forcément d'accord avec le propos de Cirec, puisque j'utilise moi aussi D4 pro avec licence.

Je me dis que si un jour je dois diffuser mes softs... payant ou pas, je suis ainsi libre d'en décider.

Et puis je ne suis pour l'instant pas vraiment limité dans les
possibilités, mais il est vrai que je suis encore en apprentissage, et
pour un moment...

Sinon, avec D4 pro, on dispose de tout ce qui faut pour les BD, internet et le réseau.

L'absence la plus cruelle est la série des TShellTreeView, etc... qui
sont extrêmement puissants et utiles (et beaux), mais qui ne sont hélas
apparus qu'avec D5.

Il manque parfois quelques fonctions apparues sur les versions ultérieures, mais on peut toujours les recréer...

Je pense à la série des "Exclude/IncludeSlash" et autres PathDelimiter
qui sont faciles à recréer. Plus gênant pour moi l'absence de la
bibliothèque de fonctions DateTime, mais il est très facile de
réinventer "EncodeDateTime".


Ce n'est certes pas un choix toujours facile, mais personnellement le
fait qu'il manque quelques fonctions "toutes cuites" m'aide à
progresser.

Mais je comprends et admets les réticences de jlen100, et pense
effectivement qu'il vaut mieux utiliser les composants Indy, et de
toute manière ne pas essayer ce compiler sous D2005-2006 un code écrit
sous D4, surtout pour un usage professionnel.


Bonne prog' dominicale
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 sept. 2006 à 14:53
je ne suis pas non plus un pro de la programmation; ce n'est pour moi un outil comme un autre et c'est surement pour celà que j'essaye d'aller au plus simple (surtout qu'il faut que cela reste compréhensible pour mon petit cerveau!!)
j'utilise indifférament D6 entreprise D7 et D2005 perso surtout quand je veux poster un code sur CS pour qu'il soit utilisable par le grand monde)
les problèmes de compatibilité sont surtout embêtant pour les versions antérieures mais avec un peu d'habitude il sont assez vite résolus
-->Japee pour ton programme il suffit de remplacer NMHTTP1 par un composant IDHTTP client ce qui donne IDHTTP1
de mettre :
Body:=IdHTTP1.Get(Url1);
de supprimer la ligne Body := IdHTTP1.Body;
et cela fonctionne

@+
jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
3 sept. 2006 à 14:55
"et de toute manière ne pas essayer de compiler sous D2005-2006 un code écrit sous D4"

Je ne fait plus que ça !!!

au début quand j'ai eu D9 je ne voulais plus entendre parler de D4

Mais j'ai très vite remaqué que ce n'était pas la bonne méthode, en effet les codes écrits sous D9 (des composants principalement) me demandaient le double de temps de dévellopement (j'abuse un peut) puisqu'ils refusaient de fonctionner tel quel sous D4.
Alors que l'inverse fonctionne pratiquement à chaque fois, bien sur, sauf dans les cas cités plus haut.

Et ce qui me chagrine par dessus tout c'est qu'un code compilé sous D4 fait 482.5 Ko et le même code compilé sous D9 (où D2005) fait 587.0 Ko?
100 Kilos pour le même code ça fait beaucoup ... non ?
et le programme ne fonctionne pas mieux pour autant !

"Quand on développe pour commercialiser les gains de temps sur le développement compensent largement le coût d'achat d'une nouvelle licence"

mais ce n'est pas le cas de la majorité des membres ... la plus part des membres font ça pour le plaisir (comme moi)

Bien sur ça ne veut pas dire qu'il ne faut pas suivre l'évolution de Delphi (qui apparement en est à sa fin) loin de moi l'idée ...

Bon sur ce bonne prog à tous ...
@+
Cirec
0
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
3 sept. 2006 à 17:41
Effectivement, pour avoir cette adresse tu doit regarder le réseau de l'exterieure.

Tu peux utiliser des API pour retrouver des infos sur les adresses de routages (j'ai fait une source la dessus), les différentes interfaces et autres adresses locales. Tu peux aussi trouver des infos sur les différentes interfaces dans le registre à cette clé : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

Le problème peut être résolu si tu utilises un modem simple, avec un PC derrière. Mais si tu te trouves derrière un ou plusieurs routeurs, tu ne pourras pas récupérer ton adresse internet comme çà.

Tu peux trouver les adresses des différents routeurs qui mène à une autre machine via la commande "tracert" mais celle-ci ne te renverra que les IP qui te permettent de sortir, donc l'IP de ton FAI et ta passerelle mais non la tienne.

En gros tu es obliger de communiquer avec une machine distante, et c'est elle qui te renverra ton IP, car c'est à partir du moment ou tu sors vers ton FAI que ton adresse internet va apparaitre dans les paquets.

<!-- blocPrincipal -->
 /\_/\
( o.o ) ~ ElGuevel ~
 > ^ <
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 sept. 2006 à 20:05
-->      jlen100
"A la connexion c'est ton FAi qui te transmet l'adresse mais elle n'est pas stockée".

De plus, elle peut varier dans le temps...
Mais je me pose une question:  Ne serait-il pas possible d'intercepter ces messages pour chopper l'IP?
Et c'est quoi ces messages du FAI?
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 sept. 2006 à 20:20
-->Caribensila en théorie c'est possible mais en pratique plusieurs problémes peuvent se poser:
-1) tous les FAI ne renvoient pas l'IP à la connexion
-2) il faudrait que ceux qui le renvoient le fassent sous le même protocole ce qui n'est pas évident et enfin le connaitre.

pour les modifications d'IP dans le temps cela dépend également des FAI certains n'attribuent d'IP qu'à la connexion au service (c'est la majorité des cas), d'autres le changent périodiquement. Une solution c'est de vérifier périodiquement l'IP en cours... ou demander un IP fixe

@+
jlen
0
Rejoignez-nous