CPython 3.14 imaplib tra SOCKS kun kontrolita TLS
Adaptu IMAP SSL-konekton de CPython 3.14 tra SOCKS sen anstataŭigi ingojn tutmonde aŭ perdi la TLS-identecon de la poŝta servilo.
IMAP SSL-konekto povas vojaĝi tra SOCKS, konservante la poŝtan servilon kiel ĝian TLS-partneron. La utila integriĝpunkto estas tie, kie la kliento kreas sian transporton, antaŭ ol la kutima IMAP-saluto kaj la traktado de kapabloj komenciĝas.
Por CPython 3.14, la sekvanta montras malgrandan adaptilon uzantan PySocks. Ĝi transprenas privatan transportan hokon, do tenu ĝin ligita al la prizorgata imaplib-versio:
import imaplib
import ssl
import socks
class SocksIMAP4SSL(imaplib.IMAP4_SSL):
def _create_socket(self, timeout):
stream = socks.create_connection(
(self.host, self.port),
timeout=timeout,
proxy_type=socks.SOCKS5,
proxy_addr="proxy.example",
proxy_port=1080,
proxy_rdns=True,
)
try:
return self.ssl_context.wrap_socket(
stream, server_hostname=self.host)
except Exception:
stream.close()
raise
context = ssl.create_default_context()
with SocksIMAP4SSL("imap.example", ssl_context=context,
timeout=15) as mailbox:
mailbox.noop()La nomoj kaj la pordo estas lokokupantoj por jam disponebla prokurilo kaj IMAP-servo. Por publika IMAP-celo rajtigita uzi publikajn prokurilojn, la listo de SOCKS5-prokuriloj proponas kandidatojn; ĉiu devas permesi la bezonatan poŝtan gastiganton kaj pordon. La dependaĵo PySocks provizas la SOCKS-intertraktadon; imaplib ankoraŭ pravalorigas la poŝtan seancon. Neniu tutmonda anstataŭigo de socket.socket estas implikita.
Konservu la identecon de la poŝta servilo
La TLS-gastigantnomo restas imap.example. Ĝi ne estas la SOCKS-gastigantnomo. Transdoni ssl.create_default_context() intence ebligas la kutimajn kontrolojn de atestilo kaj gastigantnomo; sola ĉifrita ingo ne sufiĉas por starigi tiujn kontrolojn.
proxy_rdns=True petas, ke la SOCKS-vojo traktu la celan gastigantnomon. Se la prokurilo postulas konton, ĝiaj subtenataj akreditilaj argumentoj apartenas al tiu transporta agordo. Ili ne ensalutas la poŝtkeston.
Lasu la seancon pravalorigi per imaplib
La adaptilo redonas la TLS-fluon al la kutima konstruilo. Reefektivigi open() el malnova ekzemplo povas maltrafi tempolimajn parametrojn, bufradon kaj aliajn pravalorizajn atendojn. En CPython 3.14, eĉ la malnova aliro file estas kongrueca eco, ne kampo por libere rekonstrui.
Ĉe biblioteka ĝisdatigo, reviziu ĉi tiun privatan hokon kontraŭ la konforma fonto. Se konservi subklason ne taŭgas, elektu poŝtan klienton kun dokumentita prokurila transportinterfaco. Ĉiu aranĝo konservu la saman disigon: prokurila konekto, TLS-kontrolo de la celo, poste IMAP-aŭtentikigo.