J'essaie donc de créer un protocole de tunneling en python. J'ai la configuration de l'interface tun, routé tout le trafic à travers elle. Mais maintenant, comment puis-je obtenir les paquets qui sont redirigés vers l'interface tun dans mon programme pour les crypter et les envoyer au serveur? De ce que j'ai vu c'est soit la fonction socket.bind() ou socket.setsockopt(). Ceci est ma configuration d'interfaceLecture et traitement des paquets à partir de l'interface réseau avec python
Et ce code que je l'utilise pour l'instant:
import os, sys
from select import select
f = os.open("/dev/tun0", os.O_RDWR)
os.system("ifconfig tun0 add 10.6.0.1 10.6.0.2")
os.system("ip route add 0/1 dev tun0")
try:
while 1:
r = select([f],[],[])[0][0]
if r == f:
packet = os.read(f, 4000)
print(str(len(packet)) + " : " + str(packet))
except KeyboardInterrupt:
print ("Stopped by user.")
os.system("ip route delete 0/1 dev tun0")
ce lit directement depuis l'appareil. Y at-il un moyen d'utiliser la bibliothèque socket pour lire le paquet individuellement?
Merci.
OS: macOS Sierra
Le mode de promiscuité n'est peut-être pas le chemin à parcourir, mon interface tun0 est mis en place un point à point, prends un autre regard à ma question j'ai ajouté des détails –
Pourquoi pas? Avec une socket en mode promiscuous et s.readfrom() vous obtenez un paquet et de qui il est venu. Vous devriez avoir deux renifleurs, un attrapant TCP et un attrapant UDP, mais qu'importe. Vous pouvez même utiliser asyncore pour vous aider avec efficacité. Mais OK, vous avez choisi de bas niveau. Je suppose que vous devrez savoir lire les en-têtes de paquets manuellement, c'est-à-dire que vous aurez besoin des spécifications TCP et UDP et du protocole de périphérique supplémentaire. Utilisez ensuite le module struct pour extraire les métadonnées et le contenu. Mais d'abord je vous conseille d'aller voir comment OpenVPN fait l'affaire. – Dalen
pour la structure d'utilisation thenewboston a un très bon guide dessus. Si la version de struct ne fonctionne pas, j'utiliserai le mode promisc. merci :-) –