Thread LWP::UserAgent - URL-Splitting löst Boterkennung aus?
(7 answers)
Opened by whatever_u_want at 2020-09-16 14:04 2020-09-16T15:54:46 GwenDragon Definitiv. In C habe ich bereits vor Jahren ein Modul geschrieben, welches einen Socket an einen Tor Connector anmeldet. Der Rest ist dann einfaches HTTP/nicht ganz so einfaches HTTPS. Und LWP::Protocol::socks habe ich schon längst installiert. Verdammt, ich habe vergessen zu erwähnen, dass ich schon ein anderes Script auf dem 9050 laufen habe; ich habe also bereits funktionierenden Code, nur halt für eine andere Seite, die nicht von Cloudflare "geschützt" wird. Und dieses andere Script läuft schon seit Monaten ohne Probleme; ich gehe also erstmal davon aus, dass der Code so tut. GwenDragon Ah, jetzt wird's interessant. Was gesendet wird. Nun, das habe ich gerade in mühevoller Debugging-Arbeit selbst rausgefunden. Spoiler alert: Code (perl): (dl
)
$ua->add_handler( "request_send", sub { shift->dump; return } ); gibt definitiv nicht das aus, was du glaubst, dass es ausgibt - was es nämlich ausgibt, ist so eine Klimamodellversion. Wie sich jemand vorstellt, dass es gesendet wird, was aber nicht der Realität entspricht. In LWP::Protocol::http steht nämlich der Code, der die Statuszeile und die Header baut und das dann in das jeweilige Socket-Objekt syswrited: Code (perl): (dl
)
1 2 3 4 5 6 7 8 my $req_buf = $socket->format_request($method, $fullpath, @h); print "------\n$req_buf\n------\n"; if (!$has_content || $write_wait || $has_content > 8*1024) { WRITE: { # Since this just writes out the header block it should almost # always succeed to send the whole buffer in a single write call. my $n = $socket->syswrite($req_buf, length($req_buf)); Code: (dl
)
1 GET /example.png HTTP/1.1 Und da haben wir auch wieder diesen verfluchten "TE"-Header, den ich bereits im OP erwähnt habe. Und den Connection-Header setzt ich auch auf "keep-alive" und nicht auf "keep-alive, TE, close". Toll, wie da Fremdcode einem die Requests kaputt macht. "as_string" ist sowas von nutzlos ... Jetzt habe ich mal den TE-Müll entfernt und als HTTP-Version 2.0 eingetragen - und es tut's immer noch nicht. Diesmal aber mit einem neuen RC: 505 HTTP Version Not Supported. Habe auch nochmal im Browser nachgeschaut, und nicht nur ist es Version 2.0, die der Browser sendet, sondern der Server akzeptiert das auch ohne Probleme, ich vermute also mal stark, dass LWP::UserAgent mit HTTP/2.0 nicht klarkommt. Und damit meine ich nicht mal das Protokoll an sich, sondern bereits am String "HTTP/2.0". Und nach dem, was ich so lese, wird LWP::UserAgent auch keine 2.0-Unterstützung bekommen. Ach ja, ohne TE-Header bekomme ich nur wieder 403 Forbidden. Wenn's also wirklich an der Protokollversion liegt, dann geht nur noch ohne Tor. Was'n Blödsinn. Last edited: 2020-09-16 20:02:19 +0200 (CEST) |