Comment puis-je déterminer la machine locale les adresses IP à partir de Perl?
Est-il propre et indépendant du système d'exploitation de façon à déterminer l'IP de l'ordinateur local des adresses à partir de Perl?
Pour l'instant j'ai trouvé les solutions suivantes:
-
analyser la sortie de ifconfig et ipconfig (dur, les différentes versions de windows ont différentes ipconfig sorties)
-
établir une connexion réseau avec une IP connue et examiner le socket adresse IP locale (ne fonctionne pas si je ne peux pas établir de connexion et de déterminer une seule adresse IP)
Meilleure suggestion?
Le nombre magique est 127.0.0.1
Ce n'est pas ce dont j'ai besoin. Je veux juste imprimer la machine des adresses IP dans un formulaire personnalisé, je ne veux pas utiliser les adresses.
Ce n'est pas ce dont j'ai besoin. Je veux juste imprimer la machine des adresses IP dans un formulaire personnalisé, je ne veux pas utiliser les adresses.
OriginalL'auteur Zizzencs | 2008-12-01
Vous devez vous connecter pour publier un commentaire.
Net::Adresse::IP:: semble prometteur.
Fait le lien indépendante de la version 😉
Je ne comprends pas pourquoi vous avez accepté la réponse que vous avez demandé pour tous les adresses IP de la machine. Cette réponse renvoie qu'un seul.
OriginalL'auteur Leon Timmermans
Dans mon cas, j'ai besoin d'une solution sans aucune non-core dépendances. Je suis venu avec ce après avoir étudié le code de Net::Adresse::IP:::
get_local_ip_address()
doit retourner la même chaîne queNet::Address::IP::Local->public_ipv4
.Si vous le souhaitez, vous pouvez modifier la
PeerAddr
attribut (dans les arguments du constructeur pour IO::Socket::INET) à un serveur DNS local.D'accord. Si elle aide mon cas, le script que j'ai écrit a été utilisé comme une tâche cron, déployés pour le développement des boîtes de conserver les enregistrements DNS active. Si je l'ai revu, je le considère comme fatpacking Net::Adresse::IP::Local dans le script à la place. >=D
Facile sur le -1. Ce genre de chose qui aide les gens qui ne sont pas familiers avec perl et veux juste que ça fait.
malheureusement, ce n'est pas possible downvote commentaires...
L'abus d'un serveur de noms racine et fragile, car ces adresses peuvent changer.
OriginalL'auteur Tommy Stanton
Vous avez aussi quelques d'autres options, y compris votre solution à "établir une connexion réseau avec une IP connue et examiner le socket adresse IP locale".
Dans ce cas (l'établissement de la connexion réseau) toutefois, l'article souligne que:
Parmi les autres solutions: utilise "
Sys::Hostname
"(Fonctionne si
Sys::Hostname
arrive avec un nom d'hôte peut être résolu)OriginalL'auteur VonC
Pour récupérer l'adresse IP de tous interfaces, utilisez IO::Interface::Simple:
Si vous n'êtes pas intéressé par 127.0.0.1 (loopback), vous pouvez filtrer sur
$_->is_loopback
.OriginalL'auteur dolmen
Perldoc a un la réponse à cette question dans sa FAQ ("perlfaq9") - à l'aide de différents modules (qui sont des composants de la Bibliothèque Standard) ou même une fonction intégrée.
OriginalL'auteur evgeny9
J'ai eu un bon succès avec IO::Interface sur Linux et Solaris, et je pense qu'il a même travaillé sur AIX, mais je ne me souviens pas sûr. Fouiller sur search.cpan.org, rt.cpan.org et ActiveState sur les différents sites, il ressemble IO::Interface peut être confronté à des problèmes de compilation sous Windows. Je suppose que la seule façon de savoir si elle est disponible, est à la recherche pour io-interface en PPM.
OriginalL'auteur converter42
utiliser WMI?
Exemple de l'extraction d'adresses IP (en Powershell, mais il est assez clair de ce qui se passe)
Exemple d'accès WMI à partir de Perl (pas les mêmes fonctions WMI, mais là encore, le processus est assez clair)
EDIT: après une recherche sur Google codesearch pour Networkadapterconfiguration et de la langue "perl":
Exemple ressemble assez à ce que vous avez besoin
EDIT2: En fait, l'OCS code semble contenir de code pour la plupart des plates-formes pour le faire, donc il y a peut-être pas un ensemble de code qui fait cela, vous pouvez être en mesure de réutiliser leurs idées. Il est sous licence GPL.
Par exemple, voici le code Solaris. Les autres bits de couverture BSD, Linux, MacOS...
Non, WMI ne le serais pas. On dirait que vous aurez besoin de basculer sur le type de système d'exploitation et ont un code différent.
Je vais le faire si rien ne vient en aide. Je vous remercie pour votre réponse.
Le Google Code search liens sont rompus.
Oui. Google codesearch n'est plus. Je n'ai pas mis à jour
OriginalL'auteur The Archetypal Paul
l'obtention d'une interface réseau de l'adresse IP en Perl sans modules supplémentaires d'utilisation et d' 'ifconfig' sortie de l'analyse
OriginalL'auteur Lux In Tenebris
Net::Adresse::IP::Local fonctionne très bien, mais depuis l'origine de l'affiche de demande pour toutes les adresses locales, je pense que c'est mieux:
http://www.perlmonks.org/?node_id=166951
Il a bien fonctionné pour moi avec ActivePerl pour Windows XP.
OriginalL'auteur golimar
pour windows-je utiliser
La première ligne de départ 0.0.0.0 est la passerelle par défaut. Il y a peut-être plusieurs passerelles.
Les lignes de départ 255.255.255.255 sont également utiles. netstat -r et de la route d'impression sont les mêmes.
Peut être adapté pour OSX, Linux pas si utile.
OriginalL'auteur Matt
J'ai utilisé une combinaison de ces commandes Linux donc pas de dépendance sur n'importe quel module perl.
OriginalL'auteur PodTech.io