Programmation réseau avec Python Scapy

Mémorandum de programmation réseau en Python.

Installer Python Scapy

Installez en vous référant au site suivant. L'environnement est MAC OS X 10.11.6. http://nigaky.hatenablog.com/entry/20110716/1310813250

Cependant, même si vous n'installez que scapy, vous ne pouvez pas l'utiliser, vous devez donc également installer pcapy. Depuis le site suivant, téléchargez la source et installez-la. https://pypi.python.org/pypi/pcapy

Voir ci-dessous pour plus d'informations sur la scapy. http://scapy.readthedocs.io/

Générer et envoyer des paquets ARP

Code pour envoyer un message de demande ARP pour obtenir l'adresse MAC d'une adresse IP spécifique.

ARP.py


from scapy.all import *
target_ip="192.168.1.1"
frame = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(op=1, pdst=target_ip)
sendp(frame)

Générer et envoyer des paquets ICMP

Le code pour envoyer un paquet ICMP à une adresse IP spécifique.

ICMP.py


from scapy.all import *
target_ip="192.168.1.1"
frame = Ether() / IP(dst=target_ip) / ICMP()
sendp(frame)

Générer et envoyer des paquets TCP SYN

Code qui envoie un paquet TCP SYN vers une adresse IP et un port spécifiques.

ICMP.py


from scapy.all import *
target_ip="192.168.1.1"
dst_port = 5001
src_port = 5002
frame = IP(dst=target_ip)/TCP(flags = 'S',sport=src_port,dport=dst_port)
send(frame)

Renifler les paquets reçus en traitement parallèle

SniffRecPkt.py


import threading
from scapy.all import *

class SniffRecPkt(threading.Thread):
    def __init__(self,target_ip):
        super(RecPingScan, self).__init__()
        self.target_ip = target_ip
        self.stop_event = threading.Event() #Drapeau pour arrêter
        self.thread = threading.Thread(target = self.run)
        self.thread.start()

    def run(self):
        while not self.stop_event.is_set():
            sniff(filter="tcp and ip src host " + self.target_ip,prn=packet_show, count=1)

    def stop(self):
        """Arrêtez le fil"""
        self.stop_event.set()
        self.thread.join()    #Attendez que le fil s'arrête


def packet_show(packet):
    if packet[TCP].flags==18: #SYN/Seulement quand c'était un paquet ACK
        print "IP : " + str(packet[IP].src) + " | TCP PORT : " + str(packet[TCP].sport)

if __name__ == '__main__':
    target_ip = "192.168.1.1"
    Rec_thread=SniffRecPkt(target_ip)

    target_ip="192.168.1.1"
    dst_port = 5001
    src_port = 5002
    frame = IP(dst=target_ip)/TCP(flags = 'S',sport=src_port,dport=dst_port)
    send(frame)

    Rec_thread.stop()

Programmation de port SCAN

python:port_scan_v1.0.py


# encoding: utf-8
from scapy.all import *
import netifaces
import threading
import time
import sys
import random

class RecPingScan(threading.Thread):
    def __init__(self,target_ip):
        super(RecPingScan, self).__init__()
        self.target_ip = target_ip
        self.stop_event = threading.Event() #Drapeau pour arrêter
        self.thread = threading.Thread(target = self.run)
        self.thread.start()

    def run(self):
        while not self.stop_event.is_set():
            sniff(filter="tcp and ip src host " + self.target_ip,prn=packet_show, count=1)

    def stop(self):
        """Arrêtez le fil"""
        self.stop_event.set()
        self.thread.join()    #Attendez que le fil s'arrête


def packet_show(packet):
    if packet[TCP].flags==18:
        print "IP : " + str(packet[IP].src) + " | TCP PORT : " + str(packet[TCP].sport)


def send_tcpsyn(target_ip):
    sport = random.randint(50000,51000)
    for i in range(0,65535):
        frame = IP(dst=target_ip)/TCP(flags = 'S',sport=sport,dport=i)
        send(frame)
        send(frame)

if __name__ == '__main__':
    target_ip = "192.168.1.1"

    Rec_thread=RecPingScan(target_ip)
    send_tcpsyn(target_ip)
    time.sleep(2)
    Rec_thread.stop()
    sys.exit()

Recommended Posts

Programmation réseau avec Python Scapy
3. 3. Programmation IA avec Python
Programmation compétitive avec python
Programmation avec Python Flask
Programmation avec Python et Tkinter
Réseau de neurones avec Python (scikit-learn)
Mesure de retard unidirectionnelle du réseau par python
[Python] Programmation orientée objet apprise avec Pokemon
Programmation facile Python + OpenCV avec Canopy
Programmation réseau (basique)
Note de programmation Python
Statistiques avec python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
Comment profiter de la programmation avec Minecraft (Ruby, Python)
Génération de configuration de réseau de modèles avec Python et Jinja2
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Grattage en Python (préparation)
Essayez de gratter avec Python.
Programmation asynchrone avec libev # 2
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Communication série avec python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Publier des tweets avec python
Conduisez WebDriver avec python
Utiliser mecab avec Python 3
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python
Pensez à yaml avec python