http://www.perlmonks.org?node_id=930728

tiedwu has asked for the wisdom of the Perl Monks concerning the following question:

I am writing a perl script below that will get the web page source, looking into the response header from server, you can see it provides NTLM and Negotiate, but it seems always uses Negotiate, how can I select NTLM for authentication? I might use NTLM authentication with the way LWP::Useragent->credentials, but I don't know how to use Negotiate.
#!/usr/bin/perl use LWP::UserAgent; use HTTP::Request::Common; use LWP::Debug qw(+); use Authen::NTLM; use strict; use warnings; my $url = "http://10.1.1.1"; my $ua = new LWP::UserAgent(keep_alive => 1); $ua->credentials('10.1.1.1:80', '', 'user', 'passwd'); my $req = HTTP::Request->new(GET => $url); print "--Peforming request now...---------\n"; my $res = $ua->request($req); print "--Done with request ...---------\n"; # check the outcome if ($res->is_success) { print $res->content; } else { print "Error: " . $res->status_line . "\n"; print $res->headers()->as_string(), "\n"; } exit 0;
The output:
elvis@elvis-laptop:~/tmp/person$ ./d2.pl --Peforming request now...--------- --Done with request ...--------- Error: 401 Unauthorized Date: Tue, 11 Oct 2011 02:13:08 GMT Server: Microsoft-IIS/7.5 WWW-Authenticate: Negotiate WWW-Authenticate: NTLM Content-Length: 1181 Content-Type: text/html Client-Date: Tue, 11 Oct 2011 02:12:23 GMT Client-Peer: 10.1.1.2:80 Client-Response-Num: 1 Client-Warning: Unsupported authentication scheme 'negotiate' Title: 401 - δ��Ȩ: ���&#6 +5533;ƾ����Ч��&#6 +5533;��ʱ��ܾ X-Powered-By: ASP.NET
From the output, you can see it will redirect to 10.1.1.2 for authentication. I am not sure if it is the problem that authentication wasn't passed to next server. Any comments will be appreciated. the web page

Replies are listed 'Best First'.
Re: How to select NTLM authentication with LWP
by Khen1950fx (Canon) on Oct 11, 2011 at 03:00 UTC
    You forgot ntlmv2(1). Try this:
    #!/usr/bin/perl use LWP::UserAgent; use HTTP::Request::Common; use LWP::Debug qw(+); use Authen::NTLM; use strict; use warnings; ntlmv2(1); my $url = "http://10.1.1.1"; my $ua = new LWP::UserAgent(keep_alive => 1); $ua->credentials('10.1.1.1:80', '', 'myDomain\\user', 'password'); my $req = GET $url; print "--Peforming request now...---------\n"; my $res = $ua->request($req); if ($res->is_success) { print $res->content; } else { print "Error: " . $res->status_line . "\n"; print $res->headers()->as_string(), "\n"; } exit 0;
      elvis@elvis-laptop:~/tmp/person$ ./d2.pl Undefined subroutine &main::ntlmv2 called at ./d2.pl line 10.
      It is weird. The module Authen::NTLM was installed at:
      elvis@elvis-laptop:~/tmp/person$ ls -al /usr/local/share/perl/5.10.1/A +uthen/NTLM.pm -r--r--r-- 1 root root 7116 2011-10-10 15:48 /usr/local/share/perl/5.1 +0.1/Authen/NTLM.pm
        I've updated the latest version NTLM-1.09 which provides ntlmv2(), it still doesn't work and it will not have a redirect to 10.1.1.2. I am confusing which one is workable, NTLM-1.09 made by Nick Bebout or NTLM-1.02 made by Mark J Bush? The output:
        elvis@elvis-laptop:~/tmp/person$ ./d2.pl --Peforming request now...--------- --Done with request ...--------- Error: 401 Unauthorized Date: Tue, 11 Oct 2011 03:43:53 GMT Server: Microsoft-IIS/6.0 WWW-Authenticate: Negotiate WWW-Authenticate: NTLM Content-Length: 1327 Content-Type: text/html Client-Date: Tue, 11 Oct 2011 03:47:44 GMT Client-Peer: 10.1.1.1:80 Client-Response-Num: 1 Client-Warning: Unsupported authentication scheme 'negotiate' Title: ��δ����Ȩ&#6 +5533;鿴��ҳ X-Powered-By: ASP.NET