J'ai un proxy de socket écrit en Python qui, lorsqu'il reçoit un RST d'une paire d'homologues communicants, ferme la connexion aux deux homologues en laissant les sockets être récupérés. Il en résulte que l'autre homologue voit un FIN plutôt qu'un RST. Cela signifie que le proxy traduit efficacement RST en FIN, ce qui n'est pas idéal selon moi.Comment réinitialiser une socket TCP en Python?
J'ai trouvé que dans Linux, il est possible de reset a TCP connnection en appelant connecter avec une adresse de la famille AF_UNSPEC
. Mais je n'ai pas trouvé un moyen de le faire à partir d'un programme Python.
Comment puis-je connect
à une adresse AF_UNSPEC
en Python?
Ce que j'ai essayé jusqu'à présent
J'ai essayé de regarder la sortie help
pour la méthode connect
pertinente et trouvé ceci:
Help on built-in function connect:
connect(...)
connect(address)
Connect the socket to a remote address. For IP sockets, the address
is a pair (host, port).
Malheureusement, cela ne me dit pas ce que l'argument address
doit être dans le but de construire une adresse AF_UNSPEC
.
J'ai essayé d'envelopper le fd socket d'origine dans un nouvel objet socket avec la famille AF_UNSPEC
comme ceci:
socket.fromfd(s.fileno(), socket.AF_UNSPEC, 0)
L'objet résultant produire le même texte d'aide et toute tentative d'appel connect
sur l'objet socket nouvellement construit résultats dans
socket.error: getsockaddrarg: bad family
il ressemble à l'aide socket.fromfd
est probablement pas la réponse à ma question.
J'ai testé 'c.setsockopt (socket.SOL_IP, socket.SO_LINGER, 0)' et cela n'a pas fonctionné. La connexion s'est encore fermée avec 'FIN' pas' RST' comme je le voulais. – kasperd