Bonjour,
Je souhaite en Perl récupérer mon @IP.. j'ai essayé ENV{SERV_ADDR} ou quelque chose comme ça mais j'obtiens 127.0.0.1...
Je voudrai l'@IP en réseau que j'ai... (du style 192.168.X.Y).
Est ce que qqn pourrait m'aider?
Merci d'avance!
Version imprimable
Bonjour,
Je souhaite en Perl récupérer mon @IP.. j'ai essayé ENV{SERV_ADDR} ou quelque chose comme ça mais j'obtiens 127.0.0.1...
Je voudrai l'@IP en réseau que j'ai... (du style 192.168.X.Y).
Est ce que qqn pourrait m'aider?
Merci d'avance!
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #!/usr/bin/perl use warnings; use strict; # Script de verification des adresses IP (13-Jan-2006) # Verification de l'adresse privee use Net::Domain qw(&hostname); use Net::hostent; my $nom=hostname (); my $info=gethost ("$nom"); my @bin_ip=split(//, $info->[4]->[0]); my @ip; push (@ip, unpack ("C", $_)) foreach (@bin_ip); print "IP Privee Machine : $nom --> addr : $ip[0].$ip[1].$ip[2].$ip[3]\n"; # Verification de l'adresse publique (patte externe du FW ou du routeur NAT) use LWP::Simple; # Repose sur un service exterieur # A changer en cas d'indisponibilite ! my $page=get("http://www.adresseip.com/"); if ($page=~m/(\d+\.\d+\.\d+\.\d+)/) { print "IP Publique (patte externe) : $1\n"; }
Et c'est portable Windows/Linux.
Ca fournit aussi bien l'IP privée que l'IP publique 8)
Mais ça repose sur un service externe pour connaître l'IP publique ...
Citation:
IP Privee Machine : localhost --> addr : 127.0.0.1 IP Publique (patte externe) : 62.212.105.148
En fait :lol: , c'est la 3ème adresse que je voudrai avoir...
Je m'explique : mon poste est ds un réseau privé d'entreprise (@IP en 192.168.X.Y / 24) et c'est cette adresse ds mon réseau privé que je souhaite obtenir..
L'IP publique que j'obtiens par ton script est celle de mon Firewall, effectivement comme indiqué dans ton script "patte externe du FW ou du routeur NAT", après le NAT donc...
QQn a une idée?
Merci d'avance :wink:
si ca peut servir, je l'ai vu passer sur la mailing-list perl :
@+Code:
1
2 /sbin/ifconfig | perl -nle '/^eth\d+:\d+/&&push@l,$&}{print"@l"'
Mr6
Malheureusement (honte sur moi..), je suis ss WINDOWS XP...
EDIT: haha, je me suis inspiré de l'idée ifconfig pour faire la même version WIN32 et IPCONFIG :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 # Generate the IP#, router, and subnet mask by running the "ipconfig" command. # Run ipconfig and dump its contents to ipdump. open(IPNUM,"|ipconfig > ipdump") || die "Can't run 'ipconfig'...$!\n"; close(IPNUM); # Open the dump file open(IPNUM,"ipdump") || die "Can't open ipdump...$!\n"; # Parse out the lines with ip numbers while ( <IPNUM> ) { chomp; if ( $_ =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) { push(@ipconf,split(/\D+/,$_)); } } $IPAdws2 = "$ipconf[1]." . "$ipconf[2]." . "$ipconf[3]." . $ipconf[4]; $SubnetMsk2 = "$ipconf[6]." . "$ipconf[7]." . "$ipconf[8]." . $ipconf[9]; $Router2 = "$ipconf[11]." . "$ipconf[12]." . "$ipconf[13]." .$ipconf[14];
Je crois qu'il doit y avoir un petit accroc dans la configuration réseau de ta machine.
En effet, les noms localhost et les adresses 127.0.0.1 arrivent généralement en dernier dans les config réseau habituelles. Le fait que tu les aie en premier n'est pas idéal et aurait tendance à me faire croire qu'il y a un problème dans ton attribution de nom/adresse de machine.
En effet, j'ai toute confiance dans ce script qui m'a déjà fournit des informations fiables sous environnement windows :?
Tu peux essayer de modifier le script avant la lignepour y mettreCode:my $info=gethost ("$nom");
La résolution d'adresse se fera alors sur le nom que tu auras fournit, et pas sur le nom identifié pour la machine ...Code:$nom = "le_nom_de_ma_machine";
Effectivement, tu as raison. QUand je mets mon nom de machine, j'obtiens bien l'@IP qui va bien. Et dans ton premier code, $nom contenait bien "localhost" et ma config réseau arrive derrière...
Qu'entends tu par "problème dans l'attribution de nom/adresse de machine"? Mis à part le fait que cela soit inversé, je n'ai pas encore rencontré de problème...