Script to disconnect Linksys WRT54G wireless router on Windows

Is there an existing wireless router linksys WRT54G script out there that will run from Windows XP and hit the 'connect' & 'disconnect' button?

For example, I'd like to disconnect my wireless router (firmware 1.02.0) by clicking on a single shortcut to replace the multiple button presses today.

That shortcut would (perhaps using wget or some other idea):

  1. Connect to the wireless router IP address (https://192.168.0.1)2. Log in with a blank username & enter 'letmein' as the password
  2. Navigate to the "Status -> Router" Linksys WRT54G web page
  3. Press the "Login Status = Disconnect" button

A similar shortcut would reconnect on demand.

Is "wget" the best way to accomplish this?

I can't believe I'm the first person to need this so some kind wireless guy must have done this already. I googled for "linksys wrt54g connect script" and found something called "slackware" in addition to "wget" but I'm not a programmer so I would like to start with an existing script that does SOMETHING like hit any button on the Linksys WRT54G router. Once I have that, I can probably modify that program to do what I want.

I did find

formatting link
but I did not understand most of the detail (I have a lot to learn).

Does anyone have a script that runs on windows that will connect to https://192.168.x.y to then hit a button on the Linksys WRT54G router?

Reply to
Wilson
Loading thread data ...

Hi Routers are propriety devices there is No one universal way to control them. As a result you cab expect Windows as an OS to be programmed to control every Independent 3rd party device. If it really important you can learn simple scripting, or pay some one to do it. If you just want to disconnect a computer from the Router you can use the IPCONFOG /release command.

formatting link
(MVP-Networking).

Reply to
Jack (MVP-Networking).

Wilson hath wroth:

Sure. There are several Windoze "automation" tools. The one I like to use is the ancient "Macro Recorder" from Windoze 3.1. However, I'm not going to recommend this because of its age.

More modern incantations can be found at: ($23)

and so on. Search Google for "macro recorder" or "keystroke mouse recorder". Lots to choose from.

You start the recorder, do whatever it takes with your mouse and keyboard, stop the recorder when done, and save the macro. If you want to repeat it again, just run the macro. Simple.

Another way to do this is to install DD-WRT or OpenWRT on your WRT54G, and use various shell or expect scripts to turn the router on and off. The command to turn on/off the WAN connection could be: ifconfig eth1 up ifconfig eth1 down or something like that.

Reply to
Jeff Liebermann

Hi Jack, I want to disconnect the router from the isp (not the pc from the router). I dug some more and have some perl scripts (whatever perl is) and will see if they will run on Windows.

Apparently they need to know the name of the Linksys WRT54G button. I viewed the page source at https://192.168.1.0/StaRouter.htm and I think that the button is called "connect" and then "disconnect".

I'll keep digging and asking questions and posting the answers as I find them until we have a Linksys WRT54G script that runs from Windows to a) Log into the Linksys WRT54G router b) Navigate to the https://10.2.18.20/StaRouter.htm page c) Press the disconnect button d) Wait five or ten seconds e) Press the connect button

This refreshes with a new IP address.

Reply to
Wilson

Hi Jeff, I know from googling that you are a God on this here newsgroup so I appreciate your help even if I'm not quite sure how to install "DD-WRT".

I'll look it up and hopfully post an answer so the next guy can press a button to log into the Linksys WRT54G router, navigate to the status router page, press the disconnect button, wait five seconds, press the connect button.

This will automatically get a new IP address (at least in my setup it does when I do this manually).

Reply to
Wilson

Hi Jeff, Do you think this perl script modified to hit the disconnect & connect button will work? I'm googling for just how I would change the script below.

So far, I see the following changes needed:

  1. I will google to see how to give the "null" set (blank?) as a login
  2. I need to figure out how to press the disconnect button

Before I dig further, is this script below a good place to start in order to create a Windows script that disconnects the Linksys WRT54G wireless router from the ISP from a wireless portable PC client?

Wilson

#!/usr/bin/perl -w use strict;

# check out this documentation: # first, the cookbook #

formatting link
the LWP reference #
formatting link
oh but this is JUST what we want #
formatting link
my $adr='https://192.168.0.1/Services.asp'; # talk to this my $user='root'; my $pass='letmein';

# make a User Agent use LWP::UserAgent; my $ua = LWP::UserAgent->new;

# make a request object # fill in the button name and value from # looking at the page source. # DD-WRT puts out a complicated page with Javascript that # I don't understand how to deal with, so this doesn't work, # but in principle (if I knew what to put in for action and reboot) # it should. my $req = HTTP::Request->new(POST => $adr, ['action','reboot']);

$req->authorization_basic($user, $pass);

# send the request my $result = $ua->request($req);

# print the result print $result->as_string;

Reply to
Wilson

Bearing in mind I don't know perl, in the previous perl script to press the disconnect button on the Linksys WRT54G router ... do these changes seem correct to you perl programmers?

-----

  1. Log in from Windows to the Linksys WRT54G router with a blank username and a password of "letmein". INSTEAD OF:

I WOULD USE: my $user=''; $pass='letmein';

-----

  1. Navigate to the Linksys WRT54G "Status -> Router" web page. INSTEAD OF:

I WOULD USE: my $adr='https://192.168.0.1/StaRouter.htm'; # talk to this

-----

  1. Press the disconnect button on that Status->Router web page. INSTEAD OF:

I WOULD USE: my $req = HTTP::Request->new(POST => $adr, ['action','disconnect']);

-----

  1. Reconnect after a period of time, say 5 seconds. INSTEAD OF: my $req = HTTP::Request->new(POST => $adr, ['action','disconnect']); I WOULD USE: my $req = HTTP::Request->new(POST => $adr,

----- ['action','connect']); Since I don't know perl (nor even how to run perl on Windows XP), I wish to ask before trying to see if the approach seems like it will work for you.

Meanwhile, I'll try to get the script to work (so far, when I click on my modified script, see below, it just brings up Notepad).

Wilson

#!/usr/bin/perl -w use strict;

# check out this documentation: # first, the cookbook #

formatting link
the LWP reference #
formatting link
oh but this is JUST what we want #
formatting link
# my $adr='https://192.168.0.1/Services.asp'; # talk to this my $adr='https://192.168.0.1/StaRouter.htm'; # talk to this my $user=''; # my $pass='mypassword'; my $pass='letmein';

# make a User Agent use LWP::UserAgent; my $ua = LWP::UserAgent->new;

# make a request object # fill in the button name and value from # looking at the page source. # DD-WRT puts out a complicated page with Javascript that # I don't understand how to deal with, so this doesn't work, # but in principle (if I knew what to put in for action and reboot) # it should. # my $req = HTTP::Request->new(POST => $adr, # ['action','reboot']); my $req = HTTP::Request->new(POST => $adr, ['action','disconnect']);

# I need to figure out how to wait 5 seconds in perl; then reconnect

my $req = HTTP::Request->new(POST => $adr, ['action','connect']);

$req->authorization_basic($user, $pass);

# send the request my $result = $ua->request($req);

# print the result print $result->as_string;

# The end of a perl script to run on Windows to tell the Linksys WRT54G # router to disconnect from the ISP; then after 5 seconds, to reconnect.

Reply to
Wilson

LWP will support https URLs if the Crypt::SSLeay module is installed. More information at .

Wilson

#!/usr/bin/perl -w use strict; my $adr='https://192.168.0.1/StaRouter.htm'; # talk to this # my $user='root'; my $user=''; # the Linksys WRT54G wireless router doesn't have login name my $pass='letmein'; # make a User Agent use LWP::UserAgent; my $ua = LWP::UserAgent->new; # make a request object # fill in the button name and value from # looking at the page source. my $req = HTTP::Request->new(POST => $adr, ['action','disconnect']); sleep 5; my $req = HTTP::Request->new(POST => $adr, ['action','connect']); $req->authorization_basic($user, $pass); # send the request my $result = $ua->request($req); # print the result print $result->as_string; # The end of a perl script to run on Windows to tell the Linksys WRT54G # router to disconnect from the ISP; then after 5 seconds, to reconnect.

Reply to
Wilson

Here is my tutorial to press buttons on your router from the Windows command line.

It's not working yet because I don't know how to modify the perl script to load the Win32 OpenSSL package I installed in order to talk to https web site.

Does anyone know what line to add to the script below in order to load the Win32 OpenSSL freeware?

Wilson

---------------------------------------------------------- How to command your router from the Windows command line:

----------------------------------------------------------

  1. Install ActiveState activeperl freeware on Windows XP
    formatting link
    Install Win32 OpenSSL freeware support for https URLs
    formatting link

------------------------------------------------------------

  1. Add the following line to the perl script to load openssl ???? what is the line needed to load Win32 OpenSSL????

------------------------------------------------------------

  1. Modify the script to press desired buttons on your router

#!/usr/bin/perl -w use strict;

# Linksys WRT54G Router automation button pressing script # Read the cookbook #

formatting link
Read the LWP reference #
formatting link
Read this too #
formatting link
# my $adr='https://192.168.0.1/Services.asp'; # talk to this router my $adr='https://192.168.0.1/StaRouter.htm'; # talk to this router

# my $user='root'; my $user=''; # the Linksys WRT54G wireless router doesn't have login name my $pass='letmein';

# make a User Agent use LWP::UserAgent; my $ua = LWP::UserAgent->new;

# make a request object # fill in the button name and value from looking at the page source. # my $req = HTTP::Request->new(POST => $adr, ['action','reboot']); # # A view source on the browser web page seems to indicate the disconnect # button is named "disconnect" so I'll substitute that instead of "reboot". my $req = HTTP::Request->new(POST => $adr, ['action','disconnect']);

# Wait five seconds and then run the next command sleep 5;

my $req = HTTP::Request->new(POST => $adr, ['action','connect']);

$req->authorization_basic($user, $pass);

# send the request my $result = $ua->request($req);

# print the result print $result->as_string;

# The end of a perl script to run on Windows to tell the Linksys WRT54G # router to disconnect from the ISP; then after 5 seconds, to reconnect.

Reply to
Wilson

Quoth Wilson :

Under ActivePerl you can install Crypt::SSLeay with

C:\\> ppm install

formatting link

use warnings;

is better than -w nowadays.

Huh? You surely want to do something with this request, like submit it to $ua?

Ben

Reply to
Ben Morrow

Your suggestion is very helpful as I was clueless as to the next step.

I hope to write up a short tutorial to help others, so, in the spirit of the tutorial, here is the output from your suggested "ppm" command (whatever that is)...

I'm not sure what I just did, but a lot happened when I ran: C:\\> ppm install

formatting link
See below for the log file. Wilson

Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp.

C:\\> ppm install

formatting link
site PPM database with .packlists...done Downloading Crypt-SSLeay-0.53...done Unpacking Crypt-SSLeay-0.53...done Generating HTML for Crypt-SSLeay-0.53...done Updating files in site area...done Downloading Crypt-SSLeay-0.53 install script...done Running Crypt-SSLeay-0.53 install script...

************************************************************************** This software package uses strong cryptography, so even if it is created, maintained and distributed from countries where it is legal to do this, it falls under certain export/import and/or use restrictions in some other parts of the world.

PLEASE REMEMBER THAT EXPORT/IMPORT AND/OR USE OF STRONG CRYPTOGRAPHY SOFTWARE, PROVIDING CRYPTOGRAPHY HOOKS OR EVEN JUST COMMUNICATING TECHNICAL DETAILS ABOUT CRYPTOGRAPHY SOFTWARE IS ILLEGAL IN SOME PARTS OF THE WORLD. SO, WHEN YOU IMPORT THIS PACKAGE TO YOUR COUNTRY, RE-DISTRIBUTE IT FROM THERE OR EVEN JUST EMAIL TECHNICAL SUGGESTIONS OR EVEN SOURCE PATCHES TO THE AUTHOR OR OTHER PEOPLE YOU ARE STRONGLY ADVISED TO PAY CLOSE ATTENTION TO ANY EXPORT/IMPORT AND/OR USE LAWS WHICH APPLY TO YOU. THE AUTHORS OF OPENSSL ARE NOT LIABLE FOR ANY VIOLATIONS YOU MAKE HERE. SO BE CAREFUL, IT IS YOUR RESPONSIBILITY.

CREDIT INFORMATION: This product includes cryptographic software written by Eric A. Young ( snipped-for-privacy@cryptsoft.com). This product includes software written by Tim J. Hudson ( snipped-for-privacy@cryptsoft.com).

**************************************************************************

Proceed with installation? [yes]

A copy of the needed library ssleay32.dll was found in C:\\WINDOWS\\system32\\ssleay32.dll. If this is compatible with the version (0.9.8a) used to compile the Perl module, all that is needed to complete the installation is to ensure C:\\WINDOWS\\system32\\ssleay32.dll is in your PATH environment variable.

Fetch ssleay32.dll? [no] Aborting download of ssleay32.dll. done 13 files installed

C:\\>

Reply to
Wilson

Hi Ben, I'm pretty confused about this part as I do not know Perl.

The original script I found googling did a "reboot" of the router.

I modified that original script to attempt to do a "disconnect" and then five seconds later to do a "connect" (assuming I have the name of the buttons correct for the Linksys WRT54G wireless router).

Here is the original script, in its entirety. Does this original script perform "something" with the request?

Wilson

#!/usr/bin/perl -w use strict;

# check out this documentation: # first, the cookbook #

formatting link
the LWP reference #
formatting link
oh but this is JUST what we want #
formatting link
my $adr='https://192.168.0.1/Services.asp'; # talk to this my $user='root'; my $pass='mypasswd';

# make a User Agent use LWP::UserAgent; my $ua = LWP::UserAgent->new;

# make a request object # fill in the button name and value from # looking at the page source. # DD-WRT puts out a complicated page with Javascript that # I don't understand how to deal with, so this doesn't work, # but in principle (if I knew what to put in for action and reboot) # it should. my $req = HTTP::Request->new(POST => $adr, ['action','reboot']);

$req->authorization_basic($user, $pass);

# send the request my $result = $ua->request($req);

# print the result print $result->as_string;

Reply to
Wilson
500 Server closed connection without sending any data back

Here is the tutorial so far ....... (note it doesn't work yet) ...... All I'm trying to do is disconnect and reconnect using a command line script.

Any and all help for this tutorial is appreciated as this is my very first perl program ever.

Wilson

Reply to
Wilson

Any idea how to debug this shortened freeware Perl script to disconnect the Linksys WRT54G wireless router from the ISP? The Perl script just hangs without any output or change in the router. Is there a way to insert debug statements or to step through the Perl code using freeware debuggers on Windows?

Here is, I think, the related "view -> source" code on the router at the web page: https://192.168.0.1/StaRouter.htm function ConnStats(obj) { var F=document.status; if(flag == 1){ F.action.value="Connect"; } else{ F.action.value="Disconnect"; } F.submit(); }

And, here is the shortened perl script using "Disconnect" as the action: #!/usr/bin/perl -w use strict; my $adr='https://192.168.0.1/StaRouter.htm'; # talk to this router # my $user='root'; my $user=''; # the Linksys WRT54G wireless router doesn't have a username my $pass='LetMeIn'; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(POST => $adr, ['action','Disconnect']); $req->authorization_basic($user, $pass); # send the request my $result = $ua->request($req); # print the result print $result->as_string; # The end

Unfortunately, when I run this router.pl script on Windows, it just hangs. Do you have any suggestions for debugging this on Windows?

Reply to
Wilson
500 read failed:

Do you have any suggestions for debugging freeware WIndows perl scripts?

Reply to
Wilson
[f'ups to clpm]

Quoth Wils> > Under ActivePerl you can install Crypt::SSLeay with

'ppm' stands for 'Perl package manager'; it is a utility which comes with ActivePerl for installing Perl modules. If you run it with simply 'ppm' you'll get a GUI you can use to locate and install modules.

The reason for the complete URL (rather than simply 'ppm install Crypt-SSLeay') is that ActiveState's repositry is located in Canada, so they aren't allowed to provide cryptographic software without a license. theoryx.uwinnipeg.ca is an alternative repositry which contains the crypto modules most people need.

Everything seems to have happened as it should. You can test it has installed correctly with

perl -MCrypt::SSLeay -e1

which should give no output.

This is saying you already have ssleay32.dll on your system. If you want to use this copy instead of downloading a new one, you need to be sure it is the correct version (0.9.8a), which you can probably check from the Properties window in Explorer, and you need to be sure it is in your PATH so perl can find it (system32 is already in your PATH, of course).

Here ppm is offering to install a new copy of ssleay32.dll; since you already have one, the default answer is no. Had you said 'yes' it would have downloaded a new copy and put it somewhere perl could find it.

The installation was successful.

Ben

Reply to
Ben Morrow

Wilson hath wroth:

How to install DD-WRT:

Note that there are different firmware images and proceedures for the various WRT54G hardware versions. You didn't specify yours. Check the serial number label.

I believe I suggested a method using a "macro recorder".

Maybe. Most ISP's don't work that way. If you disconnect, the next time you reconnect, you'll probably get the same IP address. That's to keep their log files sane. Notable exceptions are the ISP's that change IP addresses to discourage setting up servers.

I question why you would need to change IP's? If this is some variation on trying to become anonymous or hidden while on the internet, you're on your own.

I'm not a Perl programmer, so I can't help you learn Perl via usenet.

Reply to
Jeff Liebermann

I think I'm going to have to give up as there just seems to be no way that any perl script can press any button on a linksys WRT54G router based on all my hundreds of failed attempts and the lack of any successful perl scripts on the Internet.

Advice for the next guy: Be forewarned; you can't press a button on a Linksys WRT65G router using Perl. Some other approach might work; but not Perl.

Reply to
Wilson

What nonsense. You said yourself that you're not a programmer and don't know Perl - what makes you think that something is impossible simply because *you* can't figure it out?

sherm--

Reply to
Sherman Pendley

I'd like to agree with you Sherman, but, it's pretty simple to prove my point. Nobody else has figured it out either.

Keep in mind the Linksys WRT54G is one of the most common home routers on the planet and that Cisco/Linksys makes very many others that are similar and still - and still - even with all that going for it - nobody on the planet has yet found or ever posted in the history of the Internet a working perl script to press a button on the router. Any button. That isn't proof - but how would you expect anyone to believe it can be done if nobody has ever done it?

If someone provides a working perl script that, from windows, can press a button (any button) on the Linksys WRT54G router in https mode - I'll agree with you. Otherwise, it's either as you implied, nobody on earth has ever tried using Perl to press a button (any button) on the most common router on the planet - or - as I have sadly concluded, despite my attempt at a tutorial for the masses, it just can't be done in perl.

I'm sure there is another way though so I'm not giving up on the project - I'm just giving up on Perl as it seems to be a rather non-functional language if it can't even do what takes me five manual presses with the mouse.

The good news is I'm still the Internet for that as yet unknown method to press a button on an https web page as I digest my holiday turkey. :)

Wilson

Reply to
Wilson

Cabling-Design.com Forums website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.