程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Scapy: Écrivez votre propre outil de capture de paquets réseau en python

編輯:Python


AvecPythonDe plus en plus populaire,De plus en plus utilisé dans le domaine de la sécurité.Ça pourrait marcher.requests La composition du module est en coursWebOutils de demande;AvecsocketsCompilationTCPProgramme de communication réseau;L'analyse et la génération de flux d'octets peuvent être utilisées avecstructModule.L'analyse et le traitement des paquets réseau sont plus courants dans le domaine de la sécurité réseau,Souvent


Nous utiliseronstcpdumpEtwireshark(tshark).Mais si vous devez écrire votre propre programme pour le gérer,Des paquets de langues plus flexibles sont nécessaires(Bibliothèque),C'est ce que cet article va introduireScapy.

Généralités

Scapy Est utilisé pour analyser les paquets réseau sous - jacentsPythonModules et programmes interactifs,Le programme a résumé le traitement des paquets sous - jacents,Rend le traitement des paquets réseau très simple.Cette bibliothèque de classe peut avoir un très large éventail de cas d'utilisation dans le domaine de la cybersécurité,Peut être utilisé pour exploiter le développement、Violation des données、Surveillance du réseau、Détection des intrusions et analyse du trafic.ScapyIntégration avec la visualisation des données et la production de rapports,Il est facile de présenter les résultats et les données.

ScapyL'idée de base est de proposer un langage spécifique au domaine,Pour un format câblé facile et rapide(Wire Format)Gestion.

Fonctionnement de l'installation

ScapyPeut passerpipInstallation:

pip install scapy

Peut également être installé via le gestionnaire de paquets de la distribution ,Par exemple,yum, Mais sa version est peut - être trop vieille et dépassée .

Vous pouvez également le faire directement à partir de l'entrepôt officiel cloneInstallation du code source:

git clone github /secdev/scapy

Et puis, Peut être exécuté simplement :

cd scapy

./run_scapy


Exemples d'utilisation

AnalysePCAPPrends le sac.

AvecScapy La chose la plus simple à faire est de lire PCAPDocumentation.TéléchargerWiresharkDesip-rtp-opus-hybrid.pcap ExemplePCAP Le paquet est un exemple :

Avecrdpcap()Introduction de la fonctionPCAPDocumentation, Une fonction qui lit son contenu :

>>> pkts = rdpcap("sip-rtp-opus-hybrid.pcap")

>>> pkts

<sip-rtp-opus-hybrid.pcap: TCP:0 UDP:7 ICMP:0 Other:0>


Pour une lecture plus détaillée PCAPDonnées dans le fichier,Peut être utiliséPcapReader Lecture itérative d'un paquet à partir d'une poignée de fichier ouverte , Un sac à la fois ,bingObjet instantané:

>>> fd = open("sip-rtp-opus-hybrid.pcap", "rb")

>>> reader = PcapReader(fd)

>>> reader

<scapy.utils.PcapReader at 0x7f913c7c24e0>

>>> for CC in reader:

...: print(CC)

...:


>>> fd.close()

Comme indiqué ci - dessus, Chaque paquet est disponible en format câblé .Scapy Mettez chaque paquet dans la pile de la couche réseau .Scapy L'objet Layer correspond au Protocole réseau et à son format câblé .

Obtenez le premier paquet et vérifiez IPSi le calque est disponible:

>>> first= CC[0]

>>> first.haslayer(IP)

True

>>> IP in first

True

Pour analyser les paquets d'un niveau particulier , Il peut être indexé par le niveau désiré ,Et laissezScapyImprimer tous les champs:


Pour imprimer un paquet en hexadécimal ,Peut être utiliséhexdump()Fonction:

>>> hexdump(first)


Pour une analyse complète et une sortie parfaite d'un paquet ,Besoin d'appelershow()Méthodes:

>>> first.show()


Je vois., Impossible de résoudre efficacement ci - dessus SICharge.C'est parce queScapy Traitement principal des protocoles binaires La partie inférieure de la pile réseau ,EtSIPNon, pas du tout.. Mais il est possible d'introduire des modules tiers pour analyser certains protocoles de couche d'application ,Par exemple,HTTPAccord.

Résolution de capture de paquets en temps réel

Par exemple, vous pouvez lire des paquets pré - saisis PCAPDocumentation, Si vous devez faire un reniflement de paquets , Si le système est prêt à utiliser l'interface réseau en mode hybride ,Peut être appelésniff() Fonction pour obtenir des paquets de données de la carte réseau :

>>> for CC in sniff(count=5):

...: CC.show()

...:


Scapy Peut également être utilisé avec Wireshark(tshark)、tcpdump Même chose.BPF Syntaxe pour filtrer les paquets renifleurs et de nombreux autres outils pris en charge :

>>> for CC in sniff(filter="udp", count=5):

...: CC.show()

...:

Pour enregistrer les paquets capturés dans PCAP Pour une analyse plus approfondie ,Peut être utiliséwrpcap() Fonction pour exporter vers un fichier :

>>> capture = sniff(filter="udp", count=5)

>>> capture

<Sniffed: TCP:0 UDP:5 ICMP:0 Other:0>

>>> wrpcap("udp.pcap", capture)

EnvoyerpingSac

En plus de pouvoir renifler ( Capture et analyse )Paquets réseau,Mais...Scapy La génération de paquets est également prise en charge pour diverses spoofings proactifs :Numérisation du réseau、Sonde serveur、 En envoyant une demande d'attaque contre un système mal formé, etc .

Essayez maintenantpingUn serveur, Il s'agit d'envoyer un ICMPPaquet de données:

>>> CC = IP(dst="XXX") / ICMP()

>>> CC.show()


Puis appelezsr1()Fonctions,Peut envoyer unICMPPaquet de données(C'est - à - dire:ping), Attendre que le paquet de retour revienne :

>>> rr=sr1(CC)

Begin emission:

Finished sending 1 packets.

...*

Received 4 packets, got 1 answers, remaining 0 packets

>>> rr


C'est vrai ICMPRéponse.

Pour envoyer plusieurs paquets et recevoir des réponses (Par exemple, la réalisationpingScan),Ça marchesr()Fonction. Envoyer plusieurs paquets , Mais en attendant une seule réponse .Ça marche encoresr1_flood()Fonction.

Désordre de la couche de protocole réseau

ScapyEn surchargantPython“/” Opérateur pour réaliser la pile de couches , Ne plus forcer l'exécution dans l'ordre de la couche réseau , Pour atteindre l'ordre prévu d'exécution humaine ( Ceci est utile pour certains tests et applications ).


>>> CC=ICMP() / UDP() / IP() / IP()

>>> CC

<ICMP |<UDP |<IP frag=0 proto=ipencap |<IP |>>>>

>>> CC.show()

###[ ICMP ]###

type= echo-request

code= 0

chksum= None

id= 0x0

seq= 0x0

###[ UDP ]###

sport= domain

dport= domain

len= None

chksum= None

###[ IP ]###

version= 4

ihl= None

tos= 0x0

len= None

id= 1

flags=

frag= 0

ttl= 64

proto= ipv4

chksum= None

src= 127.0.0.1

dst= 127.0.0.1

\options\

###[ IP ]###

version= 4

ihl= None

tos= 0x0

len= None

id= 1

flags=

frag= 0

ttl= 64

proto= hopopt

chksum= None

src= 127.0.0.1

dst= 127.0.0.1

\options\

>>> hexdump(CC)

WARNING: No IP underlayer to compute checksum. Leaving null.

0000 08 00 F7 65 00 00 00 00 00 35 00 35 00 30 00 00 ...e.....5.5.0..

0010 45 00 00 28 00 01 00 00 40 04 7C CF 7F 00 00 01 E..([email protected]|.....

0020 7F 00 00 01 45 00 00 14 00 01 00 00 40 00 7C E7 [email protected]|.

0030 7F 00 00 01 7F 00 00 01


Conçu pour, Principalement pour pouvoir générer des paquets réseau arbitraires ( Endommagé intentionnellement ), .Utilisé pour la recherche ou l'exploitation de tests de vulnérabilité . Bien sûr, pour les utilisateurs qui ne sont pas familiers avec ce bloc , Il est fortement recommandé de ne pas essayer facilement , Pour éviter les problèmes .

Visualisation des données

ScapySoutien à l'adoptionPyX( Module pré - installé requis )Visualisation des données. .Un dessin qui peut être exporté vers un paquet ou une liste de paquets (PostScript/PDFFormat):

>>> xxCC[404].pdfdump(layer_shift=1)

>>> xxCC[404].psdump("/tmp/xxCC.eps",layer_shift=1)


Test flou

Utiliser la fonctionfuzz() La construction rapide peut être utilisée pour générer des valeurs d'essai aléatoires à tester à l'aide de modèles flous et de boucles d'envoi .Dans l'exemple suivant,IP Couche normale ,UDPEtNTPCouchefuzz.UDP La somme de contrôle sera correcte ,UDP Le port de destination sera NTPSurcharge sous123,EtNTP La version sera forcée à 4, Tous les autres ports seront randomisés :

send(IP(dst="target")/fuzz(UDP()/NTP(version=4)),loop=1)

................^C

Sent 16 packets.

Résumé

Jeter des briques pour attirer le jade, Nous présentons ici quelques ScapyObjet,Bien sûr que si.scapy La partie émergée de l'iceberg d'une énorme fonction , Pour de plus amples informations, veuillez consulter la documentation officielle .

À la connaissance des insectes, certains outils sont déjà utilisés scapySac:

Trackerjacker: WiFiMapper réseau


Wifiphisher: Wifi Outil de création de points d'accès


Sshame:SSH Craqueur de violence à clé publique


ISF: Cadre d'utilisation des systèmes industriels .


.Il y a d'autres utilisations plus spéciales pour lesquelles vous devez hacker Pour creuser plus loin .


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved