By David Legg,
to Main Menu
You often find that you need to log into a remote machine over the Internet, but don't know where to find it, i.e. you don't know its IP number (and please would all Internet authors note that the word 'its' has *no* apostrophe.)
A reason that you might not know the IP address of your remote machine is that it is behind an ADSL router that gets a new IP number every time the service provider feels like it, or every time that the router is re-booted.
Below is a little script that looks up the PC's IP number, that is its IP number on the Internet and emails it to you using your normal SMTP mail server somewhere.
Tested and works nicely on Fedora Core 5 and Fedora Core 6 Linux. Email me if it works for you on other operating systems at dwlegg (at) gmail (dot) com.
1. Go to here and download then install SMTP_auth Perl module.
2. Copy and paste the program below into an editor.
3. Save it in a file (say hello.pl) and make it executable, e.g. chmod 755 hello.pl.
4. Note that it will probably contain a plain text password, so you may want to be tighter than 755 permissions, say 700 and owned by root.
5. Edit ' smtp.your.mail.server.net' to be your own service provider's mail server, that is his SMTP server.
6. Edit 'your_smtp_login_id' to be correct for you, and also ' your_smtp_password'.
7. Edit the three occurrences of 'you\@your_email_address.net', being careful to keep the '\' in front of the '@'.
8. Save the file and check that the permissions are correct as per #3 and #4 above.
9. Test the program by running it: ./hello.pl
10. An email should appear shortly thereafter. If not, look for clues in the program's output.
11. If you are still having trouble, turn on debugging by uncommenting the Debug=>1 line.
12. Install the program on your remote PC. Make it run by referencing it from /etc/rc.local, or run it as a cron job, whatever you prefer.
13. When you receive an email telling you the machine's IP address, you can log in to it over the Internet from another machine by typing ssh 123.456.78.9 -l root or similar.
14. Note that the statement: print $smtp->auth_types() lists all the authorisation types that your SMTP server supports, so you have the option of improving this program by choosing a type that is better than 'LOGIN' on the next line to something more secure.
#!/usr/bin/perl -w # # Find external, Internet, IP address and email it. # D.W. Legg 22/6/2007 chdir("/tmp"); `wget -O out1 -o out2 -t 10 http://www.showmyip.com/simple/`; my $external_ip = `cat out1 out2`; unlink 'out1'; unlink 'out2'; my $uname = `uname -a`; use Net::SMTP_auth; $smtp = Net::SMTP_auth->new('smtp.your.mail.server.net', # Debug=>1, ); print $smtp->auth_types(), "\n"; $smtp->auth('LOGIN', 'your_smtp_login_id', 'your_smtp_password'); $smtp->mail('you\@your_email_address.net'); $smtp->to('dyou\@your_email_address.net '); $smtp->data(); $smtp->datasend("To: you\@your_email_address.net\n"); $smtp->datasend("Subject: IP of $uname\n"); $smtp->datasend("\n"); $smtp->datasend("$external_ip\n"); $smtp->dataend(); $smtp->quit;