Accesser
Accesser copied to clipboard
HTTPS (proxy) protocol
accesser work for Firefox 66.0.3 (with SwitchyOmega), but not work for chrome 74.0.3724.8 64bit (with SwitchyOmega). here is the debug message:
D:\Projects\Accesser>python accesser.py
Accesser v0.6.1 Copyright (C) 2018-2019 URenko
2019-04-27 13:14:33 INFO Accesser.DoH: Selecting DoH server...
2019-04-27 13:14:33 INFO Accesser: server started at 127.0.0.1:7655
2019-04-27 13:14:38 INFO Accesser.DoH: Auto selected DoH server: sdns.233py.com
"ÚÚÀ+À/À,À0̨̩ÀÀ / 5 r: ü'Ýô4æZç¨Ôe²BýNª7²¶ÞÁEAiÏù »h{¿9LûßWk§1uéÊÚCÊ[ÁO3på\
2019-04-27 13:14:44 DEBUG Accesser: üïïòØeRhôiüêþ8×0©Uç¸6F ßp8aülD`Kp (hYbâ¨ÿ·õ Éòñ "êêÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:14:44 DEBUG Accesser: ü©ýMiÌ;¼:Èãk4@]!
^ðòº(T
R©Y[¬«;¼7#8e³ÑvGM ªTÇö8ãO*ÁgÓø³ï:ËtÒä·] "ÊÊÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:14:45 DEBUG Accesser: üÂaõß ]çâ}ðÚ`vi
¥sÌ[b?2 òñ8ë 6 ÈÊL'xgÌ¥ñr?â©^K2¬`UE¥ "**À+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:14:47 DEBUG Accesser: üãaÚý\]/µÁöü¼®È²·bcÕ
ßg±¿D?òý ×gàò©ùOI[ÌT~¨¦}Íß<áÎ êã+ "úúÀ+À/À,À0̨̩ÀÀ / 5
qÔBm\NðcPJH¨²¼.ÀX <¤ò "cesser: üe0¢7@ù~yÊZ¢vÀB-Rã~Ë'ËU`ícÉ| ´Ä
2019-04-27 13:14:54 DEBUG Accesser: üN¾Ï1ãËQs`û䮣h;A²TQ+#®Ç®Ðp" ³ÙÁË6°ÐÞNK_t/ð=°ÈÙD¯BÝÌ-.¼ "
2019-04-27 13:14:56 DEBUG Accesser: ülÕÝVÓúÎMtl^ñðaäkøJëøÚ¿+ÆÖ"Kò ;÷gØÜlɳ#RÞ:«.ÎïÊI£h½9Ú§Fï "ÊÊÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:14:57 WARNING aioh2: Remote peer sent GOAWAY [ERR: ErrorCodes.NO_ERROR], disconnect now.
2019-04-27 13:15:01 DEBUG Accesser: üÆ,üáøÞS©Ä³¤âDQ =ªÒhöâ1R¹ ¬É'ò!Ûü8TÿâFG×ñïújDãýÑôP "À+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:15:17 DEBUG Accesser: üÑnÞÓ}"úSÓZ¢¸×wT|·Ív ô[g @ôÙ²µ¦X¡Ïå¡3Õui¥ª5§»¶xà"êêÀ+À/À,À0̨̩ÀÀ / 5
¬8RÖÌ "**À+À/À,À0̨̩ÀÀ / 5 üj
2019-04-27 13:15:19 DEBUG Accesser: ü{Që¶ßcÅ»âùß;0ô£Üªëo£8( !%?lõ[+î;~}Ù_Ô¬Tâ
2019-04-27 13:15:19 DEBUG Accesser: üI¼µ¸;_òÆ\+¯47}Ô._ým ÔôhªIYÆÌ.5aT4Ô[Å+9pjk "
2019-04-27 13:15:19 DEBUG Accesser: üÅ®Fɹ±é iF¾k&¸Óe¨ùÐïZ»Ý Üènë³æ´ò\É-ýµÖooj Äïl "zzÀ+À/À,À0̨̩ÀÀ / 5
*Ä5/ÙUYå¢éîIkÜÌU.ñq5`v&Qesser: ü*1,&yÀٷΤtuÕÙäs5C©z:©
2019-04-27 13:15:22 DEBUG Accesser: üº2c@Þ0Ùe¬ào1#˲j*ü1¶þ z,_@·"iã±.È%Àþ½µÊ5Ñ ê "êêÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:15:22 DEBUG Accesser: üì,~c¦[$F¼ú|KIøÝË&®°} Ä6}µúP[ ¤kѶ@ÛY÷DçLG¬H@öÉÖV]Ût¼Ã¯MÍú|Ï "úúÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:15:25 DEBUG Accesser: üi=6:ÕÜd¤[µdÌûü3À1ÑQøziøB3 0Ðe`JUVÒ±=¶\;ÿz×mËCñ÷òO "ZZÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:15:25 DEBUG Accesser: ür{³X¶Hq`/à¨7XϹôYiÕI ^jâ ÓSÚB¸®¸Çhͨèâ[³_¢Æþ¥ç¶Rñ "ººÀ+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:15:26 DEBUG Accesser: ü#ß¡¦ÛpA¬¿ÌR)µsé-báëX}<fm l6X*2/õbêÓ|¯Üöé½,º¸ûá
"
2019-04-27 13:15:26 DEBUG Accesser: üGvGq(ðaQ¢vÚ8ÂåéDuA¥F¿IÝ´ pºýcWØo%}.SiK©ßF%~ôð<iÍ4Éø "**À+À/À,À0̨̩ÀÀ / 5
2019-04-27 13:15:31 DEBUG Accesser: üD#/E¿±yÉ)a dpT¦¬S¡öNÒhxBV Á~WgZa5ÝS¡
2019-04-27 13:15:31 DEBUG Accesser: üزÎÖ÷Pq¡ÈËËpÕ=SÖÿVG
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 50372)
Traceback (most recent call last):
File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\socketserver.py", line 650, in process_request_thread
self.finish_request(request, client_address)
File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "D:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\socketserver.py", line 720, in __init__
self.handle()
File "accesser.py", line 194, in handle
if not self.parse_host():
File "accesser.py", line 103, in parse_host
command, path = words[:2]
ValueError: not enough values to unpack (expected 2, got 1)
----------------------------------------
2019-04-27 13:15:33 DEBUG Accesser: üégz!Ð0YO5¼6áf_Pvúk"Æ<Yú¬ Ðùâúë:lÜûXú£ZÕ]6?7ÓU½´ "
2019-04-27 13:15:37 DEBUG Accesser: üLx=eWÈeñHÆ= Áò1÷VÇF%\ì×%}© C¹Îë*£i² DZ¼®gÉkæ5üWë4K² "ªªÀ+À/À,À0̨̩ÀÀ / 5
3¾~ôÐ7ýyã-_&§rÆO\ máBù|Ì$òÊÚÓ¿jÚã¬núÄ"õ{"c$ÿ "úúÀ+À/À,À0̨̩ÀÀ / 5
Solution:
use HTTP as protocol, also for HTTPS.
Technical details:
These garbled characters are the head of HTTPS.
In fact, the HTTP (proxy) protocol will send a CONNECT head first, then start HTTPS handshake (for HTTPS traffic). Most proxy applications use this. But the HTTPS (proxy) protocol will start HTTPS handshake directly, thus we get the wrong head.
To avoid the problem, we may add auto-detection for these two protocols. But it need some time as we use CONNECT head to detect the remote server now.
Two issues in wrap SSLSocket instance: https://github.com/SeaHOH/extproxy/blob/master/extproxy/ssl_wrap_socket.py