Tester ma connexion FTP
Résolu/Fermé
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
-
Modifié par pcsystemd le 29/04/2011 à 14:45
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 5 mai 2011 à 13:47
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 5 mai 2011 à 13:47
A voir également:
- Tester ftp
- Tester son pc - Guide
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester un lien - Guide
- Tester signal wifi gratuit - Guide
- Filezilla ftp - Télécharger - Téléchargement & Transfert
11 réponses
mamiemando
Messages postés
33029
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
30 avril 2011 à 01:45
30 avril 2011 à 01:45
Il n'y a pas longtemps j'ai eu à écrire un script shell qui mettait en jeu ftp, et je t'avoue qu'avec le client de base ftp, j'ai vite arrêté au profit de lftp, bien plus simple à manipuler et plus complet.
Pour la syntaxe :
En shell, quelle que soit la commande que tu lances (du moment que ce n'est pas une built-in shell comme cd, history, logout etc..., ie quelque chose que which ou whereis parvient à localiser), tu peux récupérer son code d'exécution dans $?. Par convention, un programme qui se termine bien retourne 0.
En cas d'erreur il retourne une valeur dont la signification est généralement détaillée dans le man. Par exemple la commande rm retournera une valeur non nulle si le fichier passé en paramètre n'existe pas ou que les droits sont insuffisants.
Exemple :
Bonne chance
Pour la syntaxe :
man lftp
En shell, quelle que soit la commande que tu lances (du moment que ce n'est pas une built-in shell comme cd, history, logout etc..., ie quelque chose que which ou whereis parvient à localiser), tu peux récupérer son code d'exécution dans $?. Par convention, un programme qui se termine bien retourne 0.
En cas d'erreur il retourne une valeur dont la signification est généralement détaillée dans le man. Par exemple la commande rm retournera une valeur non nulle si le fichier passé en paramètre n'existe pas ou que les droits sont insuffisants.
man rm
Exemple :
#/bin/sh rm toto.txt if [ $? -eq 0 ] then echo "tout va bien" else echo "la commande a échoué !" >&2 fi # Fin du programme : on quitte proprement exit 0
Bonne chance
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
1 mai 2011 à 14:17
1 mai 2011 à 14:17
MErci a vous deux . Je teste cela Lundi est je vous dis ce qu'il en est.
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
Modifié par pcsystemd le 2/05/2011 à 15:45
Modifié par pcsystemd le 2/05/2011 à 15:45
Bon j'ai testé mais apparement j'ai un souci car lorsque je lance le script j'ai un mot de passe qui m'est demandé ce qui ne doit pas être car j'ai bien le fichier test.ftp avec "quit" comme contenu. D'ailleurs si je mance mon script en DEBUG on peux le voir:
Voila le contenu de mon script qui nous intéresse :
Une idée?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
./monscript.sh + case $DEBUG in ++ ftp toto.mondomaine.com ++ grep -c refused Password:
Voila le contenu de mon script qui nous intéresse :
if [ $(ftp toto.mondomaine.com < test.ftp 2>&1 | grep -c refused) -eq 1 ] then echo 'Problème de connexion au serveur FTP ' | mail -s "Problème de connexion au serveur FTP " toto@mail.com rm -f ${DIR}/test.ftp exit 1 else ftp -n toto.mondomaine.com << EOF quote USER ${PUSER} quote PASS ${PASS} cd ${PATH} bin get fichier fichier quit EOF fi
Une idée?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
2 mai 2011 à 15:51
2 mai 2011 à 15:51
Essaye avec :
Mais peut être faudra-t-il gérer une autre possibilité de motif retourné en cas de non connexion ;-\
egrep -c 'unknown|refused'
Mais peut être faudra-t-il gérer une autre possibilité de motif retourné en cas de non connexion ;-\
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
Modifié par pcsystemd le 2/05/2011 à 16:23
Modifié par pcsystemd le 2/05/2011 à 16:23
En faite je penses cela ne peux que fonctionner dans le cas ou le FTP n'est pas joignable mais si celui ci est joignable c'est a ce moment que j'ai la demande de mot de passe donc ce test ne me parait pas possible dans ce cas pour mon script.
Exemple:
la c'est ok mais si le FTP est joignable :
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Exemple:
ftp ftppasjoignable.com ftp: connect: Connection refused ftp> quit
la c'est ok mais si le FTP est joignable :
ftp monftp.com Connected to monftp.com. Name (monftp.com:toto): quit 331 Password required for quit Password:
L'accès au savoir est la première liberté que chaque homme devrait avoir.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
2 mai 2011 à 16:39
2 mai 2011 à 16:39
C'est bizarre chez moi ça marche avec un accès à mon FTP chez "free.fr" (le fichier "fich.ftp" contient la commande "bye") :
if [ $(ftp bonne_adresse.free.fr <fich.ftp 2>&1 | egrep -c 'unknown|refused' ) -eq 1 ]; then echo "Pas de serveur ftp"; else echo "Serveur ftp présent"; fi Serveur ftp présent $ if [ $(ftp mauvaise_adresse.free.fr <fich.ftp 2>&1 | egrep -c 'unknown|refused' ) -eq 1 ]; then echo "Pas de serveur ftp"; else echo "Serveur ftp présent"; fi Pas de serveur ftp $
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
2 mai 2011 à 17:05
2 mai 2011 à 17:05
Curieux,
bon je vais de nouveau tester voir que ce ne soit pas moi qui fait une gaffe quelque part.
Merci
bon je vais de nouveau tester voir que ce ne soit pas moi qui fait une gaffe quelque part.
Merci
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mai 2011 à 09:23
3 mai 2011 à 09:23
Bon définitvement , moi j'ai une demande de mot de passe, peut être que nous avons des confirgurations serveur diffèrentes ce qui pourrait expliquer que cela fonctionne pour toi et pas pour moi
Ce qui est curieux c'est que cette demande de mot de passe ne correspond a rien puisqu'il suffit que j'appui sur la touche Entrée et le script continue normalement!!!
Ce qui est curieux c'est que cette demande de mot de passe ne correspond a rien puisqu'il suffit que j'appui sur la touche Entrée et le script continue normalement!!!
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mai 2011 à 10:20
3 mai 2011 à 10:20
J'éssaie de passer par un autre test en utilisant telnet :
Mon souci est que lorsque la connexion ne fonctionne pas, normalement la commande :
devrait faire un ctrl c (commande trap et exit 2 pour un INT) hors ce n'est pas le cas.
Une idée?
Merci
if [ $(telnet domaine.com 21 < ${DIR}/test.telnet | egrep -c 'Connected') -eq 1 ] then echo "OK" else trap "echo Problème de connexion;exit 2" exit 1 fi
Mon souci est que lorsque la connexion ne fonctionne pas, normalement la commande :
trap "echo Problème de connexion;exit 2"
devrait faire un ctrl c (commande trap et exit 2 pour un INT) hors ce n'est pas le cas.
Une idée?
Merci
mamiemando
Messages postés
33029
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 mars 2024
7 736
3 mai 2011 à 19:43
3 mai 2011 à 19:43
Tant que le if n'est pas évalué (et donc tant que la commande telnet n'a pas pris fin), la commande trap n'est pas évaluée. C'est donc normal.
À mon avis il faut plutôt regarder du côté de l'opérateur & qui va permettre de lancer telnet en arrière plan tandis que le fil principal va attendre par exemple 2s avec un sleep. Au bout de 2s on relève le PID de telnet avec :
S'il est initialisé, on dégomme telnet à coup de kill.
Bon soyons clairs :
1) Ce n'est pas choquant que ton script plante si la connexion ftp ne se fait pas. Ce n'est pas à ton script de le rattraper comme je l'ai déjà dit plusieurs fois. Donc à mon humble avis, tu perds ton temps, car tu ne peux dans l'absolu pas forcément prévoir tous les motifs de plantage de commandes invoquées par ton script.
2) La solution que je te propose est "à l'arrache". En outre si des connexion telnet vers domain.com sont lancées par autre chose que ton script, c'est dommage ton script risque de les dégommer.
À mon avis il faut plutôt regarder du côté de l'opérateur & qui va permettre de lancer telnet en arrière plan tandis que le fil principal va attendre par exemple 2s avec un sleep. Au bout de 2s on relève le PID de telnet avec :
pid=$(ps aux | grep telnet | grep domain.com | awk '{print $2}'
S'il est initialisé, on dégomme telnet à coup de kill.
Bon soyons clairs :
1) Ce n'est pas choquant que ton script plante si la connexion ftp ne se fait pas. Ce n'est pas à ton script de le rattraper comme je l'ai déjà dit plusieurs fois. Donc à mon humble avis, tu perds ton temps, car tu ne peux dans l'absolu pas forcément prévoir tous les motifs de plantage de commandes invoquées par ton script.
2) La solution que je te propose est "à l'arrache". En outre si des connexion telnet vers domain.com sont lancées par autre chose que ton script, c'est dommage ton script risque de les dégommer.
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
4 mai 2011 à 13:03
4 mai 2011 à 13:03
Merci mamiemando pour toutes tes explications. Je vais tester tout cela.
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
Modifié par pcsystemd le 4/05/2011 à 15:08
Modifié par pcsystemd le 4/05/2011 à 15:08
Bon en fin j'ai réussis a résoudre cette demande de mot de passe en passant tout simplement le paramètre -n de la commande FTP :
Par contre j'ai un autre souci maintenant.
En effet si j'arrête mon serveur FTP et que j'essaie de me conecter en console, il y a bien :
hors si je lance mon script en DEBUG, il ne matche pas 'refused' et donc il rentre dans mon else.
Voici le contenu de mon script de test :
Voici le résultat lorsque je l'execute :
Une idée
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
if [ $(ftp -n mondomain.com < test.ftp 2>&1 | grep -c 'unknown|refused') -eq 1 ]
Par contre j'ai un autre souci maintenant.
En effet si j'arrête mon serveur FTP et que j'essaie de me conecter en console, il y a bien :
ftp mondomaine.com ftp: connect: Connection refused ftp> quit
hors si je lance mon script en DEBUG, il ne matche pas 'refused' et donc il rentre dans mon else.
Voici le contenu de mon script de test :
if [ $(ftp -n mondomain.com < test.ftp 2>&1 | grep -c 'unknown|refused') -eq 1 ] then echo 'Problème de connexion ' | mail -s "Problème de connexion " mail@mail.com exit 1 else echo "Ok" fi exit 0
Voici le résultat lorsque je l'execute :
./test.sh + case $DEBUG in + echo quit ++ ftp -n mondomain.com ++ grep -c 'unknown|refused' + '[' 0 -eq 1 ']' + echo Ok Ok + exit 0
Une idée
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 409
4 mai 2011 à 16:17
4 mai 2011 à 16:17
C'est egrep et non pas grep qu'il faut utiliser ou "grep -E" :
grep -E -c 'unknown|refused' egrep -c 'unknown|refused'
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
5 mai 2011 à 13:47
5 mai 2011 à 13:47
Merci encore zipe31 pour ta disponnibilité. C'est tout bon.
30 avril 2011 à 10:19
En shell, quelle que soit la commande que tu lances (du moment que ce n'est pas une built-in shell comme cd, history, logout etc..., ie quelque chose que which ou whereis parvient à localiser), tu peux récupérer son code d'exécution dans $?. Par convention, un programme qui se termine bien retourne 0.
A part pour ftp ;-((
Même si le site n'existe pas (et je suppose que s'il ne répond pas c'est pareil), ftp prend la main et attend une commande ;-(
Donc à part en utilisant des outils réseau (mais je ne sais pas lesquels), je ne vois pas comment tester la disponibilité du serveur ;-\
Modifié par mamiemando le 30/04/2011 à 12:28
Bon, chez moi la commande ftp renvoie "Connection refused" quand il n'y a personne à l'autre bout du fil.
Du coup un test comme ça doit suffire :
... avec dans toto.ftp :
Après on peut compléter les tests avec nmap etc... Mais de toute façon je ne suis pas persuadée que ce soit le job du script de rattraper ce genre d'erreur. Il plante et c'est tout, le message d'erreur ftp arrivera au moment d'invoquer la commande. Non ?
Autre possibilité, on travaille avec ssh et scp où l'on pourra directement tester le retour de la commande.
Bonne chance
30 avril 2011 à 13:23
Chez moi aussi mais uniquement avec du localhost ;-\
Sinon, oui ta solution semble faire l'affaire, en espérant que ça marche sur un site existant et momentanément indisponible ;-)
1 mai 2011 à 11:42
Ah ben très bien c'est le test que j'avais fait -_-
J'ai donné une mauvaise piste apparemment.
Sinon, oui ta solution semble faire l'affaire, en espérant que ça marche sur un site existant et momentanément indisponible ;-)
Oui c'est pas forcément évident pour faire les tests.