web-dev-qa-db-fra.com

Y a-t-il une façon de capturer la demande HTTPS avec Python?

J'ai créé un simple python Script pour capturer la demande HTTP. J'ai capturé des demandes HTTP avec mon python Script.

Mais je ne peux pas capturer les demandes HTTPS. Je veux juste capturer des informations sur les URL.

J'ai utilisé scapy à renifler. Par exemple:

from scapy.all import IP, sniff
from scapy.layers import http

def tcp_ayikla(paket):
    if not paket.haslayer(http.HTTPRequest):
        return

    http_katmani = paket.getlayer(http.HTTPRequest)

    ip_katmani = paket.getlayer(IP)
    print '\n{0[src]} IP adresinden {1[Method]} {1[Host]}{1[Path]} sitesine ziyaret'.format(ip_katmani.fields, http_katmani.fields)

sniff(filter='tcp', prn=tcp_ayikla)

Donc, j'ai des questions sur renifler.

1-) Pourquoi je ne peux pas obtenir des demandes https?

Si j'utilise netstat comme ceci:

netstat -ap | grep http

Je peux voir les demandes https

2-) Y a-t-il un moyen dans une autre langue de programmation?

Parce que j'essaie de loger les demandes HTTP.

Qu'est-ce que j'ai fait?

  • J'ai essayé d'analyser la sortie netstat avec Python. Je ne veux pas cela. Parce que ce n'est pas pur python.
  • J'ai essayé avec une saveur. Je ne pouvais pas attraper des demandes https.
  • J'ai essayé de lire les informations d'URL de SQLite. Je ne veux pas cela. Parce que ce n'est pas sur le réseau.

Que dois-je faire?

Devrais-je abandonner?

2
Ali

Le protocole HTTPS est crypté au-dessus de la couche d'application HTTP. C'est-à-dire que la demande d'obtention (URL complète) est cryptée dans l'en-tête HTTP et une application écouteuse sur le trafic réseau ne sera pas en mesure de déchiffrer le trafic.

Cela dit, vous pouvez enregistrer les adresses IP (en particulier celles connectées à des serveurs sur le port 443 - https) car la couche IP n'est pas cryptée avec HTTPS.

C'est ce que fait votre commande netstat. Il cherche TCP Connexions sur votre carte réseau et les notes qui se connectent au port 443 (protocole bien connu pour HTTPS) et observent l'adresse IP des serveurs HTTPS que vous connectez.

Je noter que si vous capturez le trafic de réseau crypté, il est possible de décrypter un tel trafic capturé si vous enregistrez la clé SSL de votre navigateur. Voir ici pour des instructions Comment Decrypt SSL Eavedroped trafic réseau avec WireShark lorsque vous enregistrez vos touches SSL; Vous devriez être capable de faire quelque chose de similaire avec Scapy.

5
dr jimbob

Il existe plusieurs techniques que l'on peut utiliser pour renifler le trafic HTTPS. Il y a quelques semaines, j'ai écrit une application homme-intermédiaire avec asyncio pour une visualisation facile du trafic de votre Internet (HTTP ou HTTPS). Vous pouvez trouver le projet ici; mitm : https://github.com/synchronizing/mitm

En substance, si vous imaginez une connexion client normale ressemblant à:

client <-> server

mitm crée une proxy man-in-the-intermédiaire qui sert de serveur pour le client, et comme le client pour le serveur:

client <-> mitm (server) <-> mitm (emulated client) <-> server

La fonction mitm (server) et mitm (emulated client) peut alors cracher les demandes qui se produisent entre le client et le server.

0
Felipe Faria