Commande pour connaître son IP, monitoring

Bonjour,

J’ai des soucis de connexion avec mon FAI, et pour prouver à ces incompétents que j’ai bien des soucis de synchro ADSL, j’ai besoin d’une méthode pour monitorer mon adresse IP externe (j’ai un routeur derrière ma box).

Sur Windows, la commande ping permet de connaître son adresse IP externe, mais ce n’est pas le cas de la commande ping sur OSX…

Je cherche donc une commande en ligne me permettant de retrouver mon adresse IP (moyennant quelques regexp bien placées pour la récupérer dans la sortie de la commande).

Vous connaissez une telle commande sur linux/OSX me permettant de trouver mon adresse externe ?

Merci !
Edité le 16/09/2007 à 18:45

et si tu te connectes a ta box tu peux pas récupérer cette info ?

Si tu veux monitorer ton ip externe, le plus simple n’est pas de passer par ton ordinateur (mac, windows ou linux) mais par ta box
Edité le 16/09/2007 à 16:53

Voici un moyen pour y arriver .

Code :

echo -n ’ Adresse Publique : ’ ;curl -s http://checkip.dyndns.org | awk ‘{print $6}’ | awk ’ BEGIN {FS = “<”} {print $1}’

Il y en a d’autres si tu veux !

PS : le parser de ce forum me fout les b… il interprete tout et n’importe quoi ! :@
Edité le 16/09/2007 à 17:14

Super pratique pour faire un monitoring automatique…


[quote="philouvb"] Voici un moyen pour y arriver .

Code :

echo -n ’ Adresse Publique : ’ ;curl -s http://checkip.dyndns.org | awk ‘{print $6}’ | awk ’ BEGIN {FS = “<”} {print $1}’

Il y en a d’autres si tu veux !
[/quote]
Génial ! Merci ! :super:
Maintenant il faut que je bidouille la commande pour qu’elle puisse être lancé depuis un script perl… Maudits interpréteurs !!!
Du coup, je veux bien tes autres commandes pour trouver celle qui passe le mieux dans Perl

Si seulement il n’y avait que le parser qui était moisi… :slight_smile:
Edité le 16/09/2007 à 17:47

Bon, c’est du crade fait à la va-vite, mais ça marche :smiley:


#!/opt/local/bin/perl -w

#$pcom = "echo -n ' Adresse Publique : ' ;curl -s [checkip.dyndns.org...](http://checkip.dyndns.org) | awk '{print $6}' | awk ' BEGIN {FS = "<"} {print $1}'";
#$ret = system($pcom);

$pcom = "curl -s [url=http://checkip.dyndns.org";]checkip.dyndns.org";...[/url]

sub ping {

	open COM,"$pcom|";
	@lines = <COM>;
	close COM;
	#print "ligne : $lines[0]\n";

	$ip = $lines[0];
	$ip =~ m/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/;
	$ip = $1;
	#print "$ip\n";

	open DATE,"date|";
	@lines = <DATE>;
	close DATE;
	$date = $lines[0];
	$date =~ s/\n//g;

	$res =  "$date : $ip";
	return $res
}

my $out = $ARGV[0];
open OUT, ">$out" or die "cannot open $out\n";

while (1) {
	my $cip = &ping;
	print OUT "$cip\n";
	sleep 10;
}

Pas besoin d’un script perl. Bash est suffisant. Mets cette commande dans un script bash (par exemple : show_external_ip.sh) puis fais simplement :
watch show_external_ip.sh
(sous Linux du moins. Je ne sais pas si cette commande existe sous MacOS)

Un petit script qui te permettra d’enregistrer les IP dans un fichier log :

#!/bin/bash
IP=curl -s [checkip.dyndns.org...](http://checkip.dyndns.org) | awk '{print $6}' | awk ' BEGIN {FS = "<"} {print $1}'
echo $IP
echo “date:$IP” >> external_ip.log

Puis tu fais watch show_external_ip.sh (en vérifiant que ton script est bien dans un répertoire de $PATH) et ça roule :slight_smile:
Edité le 16/09/2007 à 18:07

En voilà une autre

Code :

curl -s http://ipid.shat.net/iponly/ | grep body | sed s/""//g | sed s/"</body>"//g
Edité le 16/09/2007 à 18:17

Predicator> Ah bah tu m’as devancé :smiley:
Edité le 16/09/2007 à 18:08

Je vois qu’il y a du monde au portillon sur ce coup :icon_biggrin:

Bon, toujours aussi crade, mais au moins, il y a plus de contrôle.
En gros, l’IP n’est écrite dans le log que lorsqu’elle change ou tous les 10 tests sans changement…
Le premier sert au vrai log, le second sert à débugger le script :slight_smile: Je vais pouvoir augmenter le compteur de test…


#!/opt/local/bin/perl -w

#$pcom = "echo -n \' Adresse Publique : \' ;curl -s [checkip.dyndns.org...](http://checkip.dyndns.org) | awk \'{print $6}\' | awk \' BEGIN {FS = \"<\"} {print $1}\'";
#$ret = system($pcom);

$pcom = "curl -s [url=http://checkip.dyndns.org";]checkip.dyndns.org";...[/url]

sub ping {

	open COM,"$pcom|";
	@lines = <COM>;
	close COM;

	$ip = $lines[0];
	$ip =~ m/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/;
	$ip = $1;
	return $ip
}

sub date {
	open DATE,"date|";
	@lines = <DATE>;
	close DATE;

	$date = $lines[0];
	$date =~ s/\n//g;
	return $date;
}

my $out = $ARGV[0];
open OUT, ">$out" or die "cannot open $out\n";

my $pip = "";
my $maxt = 10;

while (1) {
	my $cip = &ping;
	if (!($cip eq $pip) || $maxt == 0) {
		my $cdate = &date;
		print OUT "$cdate : $cip\n";
		$maxt = 10;
	}
	$pip = $cip;
	$maxt--;
	sleep 10;
}


Merci à vous pour l’aide :wink:

Et pour le Perl, j’exècre les langages shell… Perl est tout aussi crade, mais on PEUT faire du propre, donc je préfère. Mais ce n’est qu’une question de principe :wink:
Edité le 16/09/2007 à 18:16

Ok :slight_smile:

Je faisais beaucoup de perl l’année dernière pour le plaisir, maintenant le boulot m’a obligé à me mettre au python, c’est pas mal non plus :smiley: (du moment qu’il y a aussi les regexp perl, c’est bon :smiley: )

pour faire plus simple : badday01.free.fr…

Parce que j’ai honte, j’ai un peu nettoyé le script…


#!/opt/local/bin/perl -w

# Commande shell : echo -n ' Adresse Publique : ' ;curl -s [checkip.dyndns.org...](http://checkip.dyndns.org) | awk '{print $6}' | awk ' BEGIN {FS = "<"} {print $1}';

# Retourne l'adresse IP externe courante
sub ping {

	# Commande ~ping
	$pcom = "curl -s [url=http://checkip.dyndns.org";]checkip.dyndns.org";...[/url]

	# On exécute la commande et on récupère la sortie (qui est du HTML)
	open COM,"$pcom|";
	@lines = <COM>;
	close COM;

	# Petites regexp pour récupérer l'adresse IP dans le code HTML
	$ip = $lines[0];
	$ip =~ m/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/;
	$ip = $1;
	return $ip
}

# Retourne la date courante
sub date {
	# On exécute la commande "date" et on récupère la sortie
	open DATE,"date|";
	@lines = <DATE>;
	close DATE;

	$date = $lines[0];
	$date =~ s/\n//g;
	return $date;
}

# Test des paramètres
if (scalar(@ARGV) != 2) {
	print "perl pingMonitor.pl <log> <maxt>\n";
	exit(0);
}

my $pid = $$;
print "Process $pid\n";

# ARGV[0] : filename du log
my $out = $ARGV[0];
# Ouverture et entête (pour log sur plusieurs périodes)
open OUT, ">>$out" or die "cannot open $out\n";
print OUT "\n\n####################################################################\n";
my $idate = &date;
print OUT "# Début du log : $idate\n";
print OUT "# Process $pid\n\n";

# ARGV[1] : Compteur d'écriture de l'IP.
# Quand le compteur tombe à zéro, l'IP est écrite, même si elle n'a pas changé
my $maxt = $ARGV[1];

# IP précédente pour comparaison à chaque test
my $pip = "";
# Compteur pour écriture de l'IP à intervalle de test régulier
my $cpt = $maxt;

# Boucle infinie... C'est beau l'informatique :')
while (1) {
	# Adresse IP courante
	my $cip = &ping;
	
	if (!($cip eq $pip) || $cpt == 0) {
		# Changement d'IP, ou nombre max de tests atteint
		my $cdate = &date;
		print OUT "$cdate : $cip\n";
		# On réinitialise le compteur
		$cpt = $maxt;
		# Et on change la dernière IP de comparaison
		$pip = $cip;
	}
	# On décrémente le compteur de nombre de test max avant écriture
	$cpt--;
	# Dodo...
	sleep 10;
}


[quote="bad_day01"] pour faire plus simple : [badday01.free.fr...](http://badday01.free.fr/myip.php) [/quote] En quoi c'est plus simple ? Je pense que tu n'as pas compris le principe ;) Edité le 16/09/2007 à 18:41

Plus simple que checkip.dyndns.org… parce que ça te donne uniquement l’ip, sans code HTML, donc tu n’as pas à parser la ligne pour récupérer l’ip :wink:

Une ligne de moins, trop bien :smiley:
Merci, mais c’est trop tard, et puis je pense que dyndns sera plus stable et fiable qu’un site free perso :smiley:

Encore un bug du forum : on ne peut pas modifier le titre du sujet… Je pige toujours pas pourquoi ils ont abandonné IPB pour ce… truc…
Edité le 16/09/2007 à 18:46

t’a pas assez frequenté clubic sous ipb toi… :wink:

sinon pour les preuves et autres à la hotline, ne compte pas trop sur leur effet…
il y a un long moment, j’ai envoyé un mail à free avec détail du problème, logs à l’appuie avec propositions d’hipotèse et tout le bordel…
pour recevoir la lettre type me demandant de verifier mon cablage…
(c’etait le DSLAM qui envoyait des trames malformées, j’ai dû trouver la solution moi-même à l’aide d’une règle iptables)

C’est vrai… Seulement depuis les débuts… :sarcastic:

C’est pas pour eux, mais pour moi… Pour tester mes prises. Je sais que c’est la seule option qui reste, et je répondrai que j’ai déjà essayé toutes leurs manips. Ça, ça marche…
Et puis pour eux aussi quand même, un peu… D’après leur diagnostic, je n’ai pas eu de désynchro depuis le 14 septembre… Pourtant, j’ai été déconnecté deux fois pendant que j’étais au téléphone avec eux (et la troisième fois le téléphone a décidé de ne plus marcher… $*#@%£ !!!)
Edité le 17/09/2007 à 00:10

tu preferais donc l’absence du moteur de recherche, les crash très frequents, la lenteur et la laideur ?

moi j’ai la même impression de ce changement que celui où ils sont passé de leur forum ASP à MD.net

L’absence du moteur était gênante, mais comparé à :

  • l’ergonomie aléatoire
  • l’impossibilité de récupérer son message quand le serveur n’arrive pas à ajouter le dit message
  • les TRÈS nombreux problèmes de parsing…
  • Les nombreux bugs d’affichage

Je trouvais ça moins gênant.
Quant à la lenteur, personnellement, je ne sens aucune différence.
Alors que là, des bugs, j’en trouve tous les jours…

Tu veux dire que c’est toujours aussi lent ? :ane:

(puis l’ergonomie n’est pas du tout aléatoire :o elle est juste constamment catastrophique, largement en-dessous de tous les forums amateurs que je fréquente :/)