8
votes

Comment puis-je effectuer une ping ou une traceroute à l'aide de Python natif?

J'aimerais pouvoir effectuer une ping et une traceroute à partir de Python sans avoir à exécuter les commandes de shell correspondantes, donc je préférerais une solution python natale.


0 commentaires

7 Réponses :


3
votes

Les interprètes en cours d'exécution car la racine est souvent fronçée sur des motifs de sécurité (et bien sûr, vous devez disposer d'une permission de racine pour accéder au "brut" chaussettes si nécessaire par les spécifications ICMP de ping et de traceroute!), mais si vous n'avez pas de Problèmes de ce que ce n'est pas difficile - par exemple, Cet article donne une ping-conviviale et le vieux page a encore-utilisable sous-jacent Code pour ICMP (ping et traceroute), bien qu'il soit écrit pour des versions de python très anciennes et a besoin d'un lesselift de litte pour briller avec des modernes - mais les concepts sont tous là, dans les deux URL que je vous ai donné!


7 commentaires

C'est tout à fait possible de ping et de traceroute sans prises brutes ni ICMP, avec des paquets UDP. De nombreux outils font cela.


@Glenn, ce n'est pas compatible avec les commandes de ping et de traceroute réelles: si vos homologues prennent en charge les échos UDP, ces versions pseudo-ping et -traceroute fonctionneront, mais sans ICMP, vous êtes en dehors de la norme et que vos chèques pourraient parfaitement eh bien échouer (sans contrepartie se conformer au-delà des normes) où les approches standard basées sur la CIMP fonctionnent.


Merci. Je suppose que je vais revenir à essayer d'utiliser les commandes shell. Nouvelle question à propos de le faire ici: stackoverflow.com/questions/1151897/...


Les bombardements sur les commandes de racine setuid-racine sont généralement la meilleure solution, Yep-Lemme Regardez votre autre question maintenant.


Ping utilise ICMP, mais Standard Unix Traceroute utilise réellement UDP par défaut (bien qu'il puisse être dit d'utiliser ICMP à la place). Vous n'avez pas besoin d'échos UDP, car un port fermé devrait éliminer une "destination inaccessible" ICMP avec un code de 0x03 ("port inaccessible").


UDP Traceroute est tout aussi standard que ICMP. Tout comme ICMP, c'est un effet secondaire naturel du champ TTL standard. Ping est plus délicieux - de nombreux systèmes sécurisés jettent simplement des paquets à des ports non ouverts, et si c'est coïncidemment un port ouvert - vous ne pouvez pas garantir que ce n'est pas - alors cela ne fonctionnera probablement pas.


Les deux liens donnent des 404s maintenant, ce qui rend ce lien ne répond que de manière inutile.



0
votes

Vous voudrez peut-être consulter le Paquet Scapy . C'est le couteau suisse de l'armée d'outils réseau pour Python.


0 commentaires

0
votes

ICMP Ping est standard dans le cadre du protocole ICMP.

Traceroute utilise des fonctionnalités de l'ICMP et de la propriété intellectuelle pour déterminer un chemin de temps via des valeurs vivantes. En utilisant des valeurs TTL, vous pouvez effectuer des tracerout dans une variété de protocoles tant que le travail IP / ICMP car il s'agit du TTL ICMP dépassé les messages qui vous indiquent sur le houillage sur le chemin.

Si vous essayez d'accéder à un port dans lequel aucun auditeur n'est disponible, par des règles de protocole ICMP, l'hôte est censé envoyer un message inaccessible du port ICMP.


0 commentaires


0
votes

J'ai écrit une simple tcptraceroute à Python qui n'a pas besoin de privilèges root http: / /www.thomas-guettler.de/scripts/tcptraceroute.py.txt

Mais il ne peut pas afficher les adresses IP du houblon intermédiaire. Mais parfois, cela est utile, car vous pouvez deviner où le pare-feu de blocage est: au début ou à la fin de la route.


0 commentaires

3
votes

the La bibliothèque Webb est très pratique pour effectuer toutes sortes d'extraits liés au Web ... et ping et Traceroute peut être fait facilement à travers elle. Il suffit d'inclure l'URL que vous souhaitez traceroute à: xxx

Si vous souhaitez enregistrer automatiquement le journal de traceroute dans un fichier texte, utilisez la commande suivante: xxx

De même, une adresse IP d'une URL (serveur) peut être obtenue avec les lignes de code suivantes: xxx

espère qu'il aide!


0 commentaires

2
votes

the package MTtrpacket peut être utilisé pour envoyer des sondes de réseau, qui peuvent effectuer une ping ou une traceroute. Puisqu'il utilise le back-end à l'outil de commande MTR, il n'exige pas que votre script fonctionne comme une root.

Il utilise également la boucle d'événement d'Asyncio, de sorte que vous puissiez avoir plusieurs traceurs ou plants en cours simultanément et gérer leur résultats tels qu'ils complètent.

voici un script python à traceroute à 'examer.com': xxx

la boucle avec 'TTL' est utilisée parce que Le «temps à vivre» d'un paquet sortant détermine le nombre de sauts de réseau que le paquet voyagera avant d'expirer et d'envoyer une erreur à la source d'origine.


1 commentaires

Je peux confirmer que Mtrpacket est génial!