[PERL] LWP::UserAgent werking lijkt geblokkeerd door server

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Hallo,

Ik gebruik al maanden een script om bij een leverancier het crediet level te checken. Dit werkt door via HTTPS een username en passwoord mee te geven en daaruit het euro bedrag te filteren. Het script is gebaseerd op script dat onderaan deze webpage staat http://www.emunix.emich.e.../Lecture18_WebAccess.html
Sinds twee dagen werkt het script nog wel alleen krijg ik nu wat van de server een hele andere response terug.
Opmerkingen:
- Via Firefox werkt het gewoon
- Credentials zijn niet veranderd
- Webpagina lijkt niet veranderd en dit wordt ook bevestigd door systeembeheerder.
- Heb het vanaf een andere computer (ander IP) gedraaid en zelfde resultaat
Ik krijg ook geen errors na het uitvoeren van het script en
code:
1
2
3
$f     = HTTP::Request::Form->new($forms[0], $url);
my @fields = $f->fields();
print "The fields in the form are: @fields \n";

levert nog de twee form fields op, die ook geprogrammeerd had.

De response van de website/server luidt:
code:
1
2
3
4
5
<html><head>
<meta http-equiv="Refresh" content="0;url=buy_credit.php">
</head>
<body></body>
</html>


Heeft iemand een idee wat hier aan de hand kan zijn, of wat ik moet doen/meesturen zodat ik wel weer de oude informatie krijg? Overigens indien ik anders credentials ingeef krijg ik netjes een website met foutmelding

[ Voor 5% gewijzigd door gepebril op 30-07-2010 23:30 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:10
Lastig, maar dit lijkt me weer een kwestie van debuggen. Installeer eens Wireshark of tcpdump en kijk wat er precies voor dialoog plaatsvindt bij de server.

Als je script daadwerkelijk geblokkeerd is, is het de vraag op basis waarvan die blokkering plaatsvindt. Helpt iets simpels als de User Agent string veranderen in iets standaard niet? Gebruikt de site cookies? Worden die goed opgeslagen? Als je een persistente cookiefile gebruikt, moet je die eens leeggooien en opnieuw inloggen?

[ Voor 15% gewijzigd door Soultaker op 30-07-2010 23:54 ]


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Hi Soultaker,

Dank voor het antwoord. Wireshark heb ik en ook een managed switch, dus dat is eventueel inzetbaar. Kan ik die uitkomst hier posten en dat zal tot een oplossing dienen te leiden? Daarnaast dien ik dit te doen bij de werkende situatie bij FF, of juist als het niet werkt via Perl?
Daarnaast gaat het om HTTPS, dus ik verwacht dat alle gecrypt is en wiresharks hier niet zinvol zijn of heb ik het mis. Of is dat een verkeerde aanname?
Ik gebruik dit als cookiefile
code:
1
$ua->cookie_jar({ file => "$ENV{HOME}/.cookies.txt" });

De eventuele cookie file kan ik na uitvoeren van het script niet terugvinden, lees is niet meer daar.

Blokkade kan niet op IP basis zijn, daar ik het script ook al op een andere machien heb getest op een ander IP.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 13:10
gepebril schreef op zaterdag 31 juli 2010 @ 17:31:
Daarnaast dien ik dit te doen bij de werkende situatie bij FF, of juist als het niet werkt via Perl?
Het idee was om de data-uitwisseling met Firefox (wat wel werkt) te vergelijken met die van het Perl-script (wat niet werkt) in de hoop dat er dan te zien is wat het Perl script anders doet.

Maar je hebt gelijk:
Daarnaast gaat het om HTTPS, dus ik verwacht dat alle gecrypt is en wiresharks hier niet zinvol zijn
Inderdaad, op netwerkniveau zal er niets zinnigs te zien zijn.

Wat je wel kunt doen, is de Net panel van Firebug gebruiken om de request/response data te zien, en hier staat uitgelegd (onderaan) hoe je de request/response data die LWP stuurt/ontvangt kunt laten printen.
Ik gebruik dit als cookiefile
code:
1
$ua->cookie_jar({ file => "$ENV{HOME}/.cookies.txt" });

De eventuele cookie file kan ik na uitvoeren van het script niet terugvinden, lees is niet meer daar.
Je bedoelt dat het bestand .cookies.txt in je homedirectory helemaal niet bestaat? Dat is verdacht. Weet je zeker dat je goed kijkt? Standaard worden bestanden die beginnen met een punt niet weergegeven in filebrowsers e.d. dus misschien bestaat het bestand wel, maar zie je het niet. (Probeer anders eens /tmp/cookies.txt of zo om te testen.) Heb je in Firefox trouwens wel cookies opgeslagen voor die site?

[ Voor 12% gewijzigd door Soultaker op 31-07-2010 20:24 ]


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Wellicht dat je eens met wget een request kan doen om te kijken of het dan ook mislukt. Indien dit het geval is kan je wellicht makkelijker met de request headers "spelen" om te controleren wat het probleem veroorzaakt.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Wat je wel kunt doen, is de Net panel van Firebug gebruiken om de request/response data te zien
Heb dit geïnstalleerd. Waar dien ik precies naar te kijken, of dien ik iets naar jou op te sturen want dit is de eerste keer dat ik dergelijke debug-info zie
, en hier staat uitgelegd (onderaan) hoe je de request/response data die LWP stuurt/ontvangt kunt laten printen.
Indien ik deze regels code toevoeg
code:
1
2
3
  $ua->default_header('Accept-Encoding' => scalar HTTP::Message::decodable());
  $ua->add_handler("request_send",  sub { shift->dump; return });
  $ua->add_handler("response_done", sub { shift->dump; return });

Krijg ik de melding: Can't use an undefined value as a HASH reference at (eval 5) line 1.
De regel code staat bij mij niet op regel 1 natuurlijk, maar op 89
Je bedoelt dat het bestand .cookies.txt in je homedirectory helemaal niet bestaat? Dat is verdacht. Weet je zeker dat je goed kijkt? Standaard worden bestanden die beginnen met een punt niet weergegeven in filebrowsers e.d. dus misschien bestaat het bestand wel, maar zie je het niet. (Probeer anders eens /tmp/cookies.txt of zo om te testen.)
Uitgevoerd, alleen wordt niks weggeschreven. Of beter gezegd er wordt geen cookiefile gecreeerd
Heb je in Firefox trouwens wel cookies opgeslagen voor die site?
Ik heb de standaard instellingen met FF, en dat betekent dat het onzichtbaar gebeurd. Wil je dat ik er eentje appart save en ga bekijken?

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Borizz schreef op zaterdag 31 juli 2010 @ 22:18:
Wellicht dat je eens met wget een request kan doen om te kijken of het dan ook mislukt. Indien dit het geval is kan je wellicht makkelijker met de request headers "spelen" om te controleren wat het probleem veroorzaakt.
Hoi Boris, bedankt voor de info. Het ophalen van de info gaat in twee stappen he, inlogscherm ophalen en daarna inloggen met die gegevens.
het commando 'wget' ken ik, alleen denk ik dat jij er vanuit gaat dat ik precies begrijp wat mij nu te doen staat. Ik weet dat communicatie met request en response gaat, en dat is ook alles. Kunt u iets meer hierover uitweiden.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Naast Firebug zou je ook kunnen kijken naar Fiddler ( http://www.fiddler2.com/fiddler2/ ), hiermee kun je ook het verkeer naar en van je browser bekijken.

Echter heb ik geen ervaring met HTTPS over fiddler, maar daar zou vast wel een manier voor moeten zijn om dat gedecoded weer te geven :)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
Met Fiddler kun je ook HTTPS verkeer bekijken. Je kunt dan LWP configureren om een proxy te gebruiken, ook voor HTTPS.

Acties:
  • 0 Henk 'm!

  • gepebril
  • Registratie: November 2001
  • Laatst online: 28-03-2023
Iemand op een Perl forum kwam met deze oplossing, die niet op de gebruikelijke voorbeelden van LWP lijkt. En deze werkte gewoon perfect en is nog kleiner qua code ook. Hulde aan DJ Vesko
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
use warnings;
use HTTP::Cookies;
use LWP::UserAgent;

my $user = 'xxxxxx';
my $pass = 'xxxxxx';

my $ua = LWP::UserAgent->new(cookie_jar => new HTTP::Cookies);
my $bb = $ua->post('https://www.xxxxxxx.com/myaccount/index.php?part=tplogin',
                  ['user' => $user,
                   'pass' => $pass])->as_string;

if($bb =~ m,200 Ok,i) { print "\n[ - ] Wrong Username or Password !\n"}sleep 5;
if($bb =~ m,302 Found,i) {
my $bl = $ua->get('https://www.xxxxxxx.com/myaccount/buy_credit.php')->content;
#use pattern matching to find the balance
   $bl =~ m,balanceid">&(.*?)\;&nbsp\;(.*?)<\/span>,i;
my $ss = $1;
my $nn = $2;
print "\n[ + ] You have: $nn $ss !\n";
sleep 5;
}

Daarbij de opmerking plaatsend
note "part=tplogin"

depend on site , some site i see
part=main

[ Voor 4% gewijzigd door gepebril op 03-08-2010 19:47 ]

Pagina: 1