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.
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.
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
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.
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)
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.
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 .
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)
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.
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 .
一、錯誤描述錯誤很簡單,就是xml裡面有非法字符(有的說是編
The kind of graphic editing so