1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347
|
<!--startcut ==============================================-->
<!-- *** BEGIN HTML header *** -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD>
<title>Connecting to Your Home Computer LG #53</title>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000">
<!-- *** END HTML header *** -->
<A HREF="http://www.linuxgazette.com/">
<H1><IMG ALT="LINUX GAZETTE" SRC="../gx/lglogo.jpg"
WIDTH="600" HEIGHT="124" border="0"></H1></A>
<!-- *** BEGIN navbar *** -->
<A HREF="sipos.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<IMG ALT=""
SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom" >
<A HREF="lg_toc53.html"><IMG ALT="[ Table of Contents ]"
SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<A HREF="../lg_frontpage.html"><IMG ALT="[ Front Page ]"
SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="../lg_faq.html"><IMG ALT="[ FAQ ]"
SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<IMG ALT=""
SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom" >
<A HREF="ward.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<!-- *** END navbar *** -->
<P>
<!-- A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html">
<FONT SIZE="+2"><EM>Talkback:</EM> Discuss this article with peers</FONT></A -->
<!--endcut ============================================================-->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Connecting to Your Home Computer</font></H1>
<H4>By <a href="mailto:restagner@netscape.net">Robert Stagner</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
A couple of weeks back, I was at work typing away on my NT box (please,
no flames on this, I have no other choice : -), when I suddenly realized that
a Perl script that I had been updating on my home machine (a Linux box running
Red Hat 6.0), needed to be transferred to my computer at work. Since I do not
have a 24/7 connection to the Internet for my Linux box, I was out of luck. I
could not just FTP to my home machine and download the script. Or could I?
<P>
I suppose I could set up a DSL or cable modem connection, but I personally
find that a 56K PPP connection is a lot less financially burdensome -- at least
for the time being. Anyhow, I thought about how I might somehow get the Linux
box on the Internet while unattended (i.e. just after I left for work each
morning). My solution, although involving several scripts and a cronjob, can
be set up for a PPP connection rather quickly. Once tested and configured
properly, the end result will provide you with a means of automatically
connecting to the Internet and then sending an e-mail off to your work address
containing the dynamically generated IP Address assigned to your home computer
by your ISP. The only assumptions to get this up and running are the following:
<UL>
<LI>you have root permissions (usually the case, if your running this from home).
<LI>you have copies of <A HREF="misc/stagner/ppp-on.txt">ppp-on</A>, <A HREF="misc/stagner/ppp-off.txt">ppp-off</A>, and <A HREF="misc/stagner/ppp-on-dialer.txt">ppp-on-dialer</A> shell scripts. These can
usually be found in the /usr/doc/ppp-2.3.7/scripts/ directory.
<LI>you have successfully connected and disconnected to the Internet using the
ppp-on and ppp-off scripts.
<LI>your ISP has provided you with access to a local telephone number (I suppose
this is not really required, but who wants to pay phone charges).
</UL>
<P>Other than these assumptions, configuring your system to automatically dial-up
your ISP are pretty straight forward. The first step to get this up and running is to copy over (as root) the ppp-on and ppp-off shell scripts to the
/usr/sbin/ directory. Make sure the permissions are set to 0755 for each file.
Then, copy over ppp-on-dialer to the /etc/ppp/ directory. The "dialer" script
is the second part of a two tier step in establishing a connection to your
ISP. The first, is the ppp-on script.
<P>Next, edit the ppp-on script by assigning the appropriate telephone number,
account and password information. Also, remember to assign the appropriate
device and speed of your modem. Mine read /dev/ttyS3 and 115200. It should
resemble the following once your done:
<BR>
<BR>
<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
#!/bin/sh
#
# These are the parameters. Change as needed.
TELEPHONE=<FONT COLOR="red"><B>your phonenum </B></FONT># The telephone number for the connection
ACCOUNT=<FONT COLOR="red"><B>your account </B></FONT> # The account name for logon (as in 'George Burns')
PASSWORD=<FONT COLOR="red"><B>your password </B></FONT> # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0 # The proper netmask if needed
# Export them so that they will be available at 'ppp-on-dialer' time.
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in. Please use the absolute file name as the $PATH variable is not
# used on the connect option. (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
exec /usr/sbin/pppd debug lock modem crtscts <FONT COLOR="red"><B>/dev/ttyS3 115200</B></FONT> \
asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
</CODE>
</PRE>
</TD>
</TR>
<TR>
<TD BGCOLOR="#FFFFFF">
<FONT COLOR="red"><B>Red Text</B></FONT> - code that needs to be altered to meet your needs.
</TD>
</TR>
</TABLE>
</CENTER>
<P>Now that you have all the shell scripts in the appropriate places, it's time
to look at a little Perl script I wrote that calls the connection or disconnection process, as well as send off an e-mail with the IP Address of my
Linux box to my NT box at work. Place a copy (as root) of this
<a href="misc/stagner/sendMeIP.pl.txt">script</a> in your /usr/local/bin directory with a
permissions setting of 0755. The purpose of this script is to:
<UL>
<LI>Provide a connection/disconnection to the Internet via a
shell program (/usr/sbin/ppp-on, or ppp-off).
<LI>Capture the dynamically generated IP address from the ISP service.
<LI>Send the returned IP Address to a predefined e-mail address so that
a remote connection can be made to your home computer.
</UL>
<P>The Perl script begins with the following lines:
<BR>
<BR>
<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
# Counter used to provide a delay while the ppp connection is established
$COUNT = 1;
# Check for the existence of options
if (!$ARGV[0] || $ARGV[0] !~ m/(connect|disconnect)/i) {
print "Usage: sendMeIP.pl <connect | disconnect>\n";
exit -1;
}
# Call and execute connection/disconnection to the Internet
&pppConnection($ARGV[0]);
# Caputre the dynamically created remote IP Address
$assignedIPAddress = &captureIPAddress;
# Send the IP Address via e-mail
&sendMail($assignedIPAddress);
</CODE>
</PRE>
</TD>
</TR>
</TABLE>
</CENTER>
<BR>
<BR>
<P>Essentially, all this does is first set a counter, then check to see if the
necessary arguments have been passed to the program. If so, establish a
connection (or, disconnection -- &pppConnection) to the Internet. Capture
the IP Address (&captureIPAddress) by searching the output of a call to
/sbin/ifconfig and finally send off the e-mail (&sendMail). The call to execute
ifconfig actually happens in the &captureIPAddress subroutine. Let us have a
look at this code:
<BR>
<BR>
<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
sub captureIPAddress {
my $captureIFCONFIG;
$captureIFCONFIG = qx#/sbin/ifconfig#;
if ($captureIFCONFIG =~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/) {
my $assignedIPAddress = "$1";
print "IP Address capture successful: $assignedIPAddress.\n";
return ($assignedIPAddress);
}
elsif (($captureIFCONFIG !~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/)
&& ($COUNT < 60)) {
$COUNT++;
sleep 1;
&captureIPAddress;
}
else {
print "Houston, we have a problem in capturing the IP Address.\n";
exit -2;
}
}
... [code removed for clarity]
sub sendMail {
my $assignedIPAddress = shift;
my $mailService = <FONT COLOR="red"><B>location of your mail program: mine is "/usr/sbin/sendmail"</B></FONT>;
my $from = <FONT COLOR="red"><B>"Your Name <yourLocalEmail\@host.com>"</B></FONT>;
my $to = <FONT COLOR="red"><B>"Your Name <yourWorkEmail\@host.com>"</B></FONT>;
die "Trouble sending mail: $!" unless (-e $mailService);
open(SENDMAIL, "|$mailService -oi -t") or die "Trouble sending mail:
$!";
print SENDMAIL <<"EOMAIL";
From: $from
To: $to
Subject: An Important Message About <FONT COLOR="red"><B>your.computer</B></FONT>
Use the following IP Address to establish a connection with <FONT COLOR="red">
<B>your.computer</B></FONT> : $assignedIPAddress
EOMAIL
close(SENDMAIL);
print "The e-mail message has been sent.\n";
}
</CODE>
</PRE>
</TD>
</TR>
<TR>
<TD BGCOLOR="#FFFFFF">
<FONT COLOR="red"><B>Red Text</B></FONT> - code that needs to be altered to meet your needs.
</TD>
</TR>
</TABLE>
</CENTER>
<BR>
<BR>
<P>First, the /sbin/ifconfig command is executed using Perl's equivalence of a
backtick (qx function). The output of this command is captured in the
$captureIFCONFIG variable. We then attempt to look for a pattern that
contains "inet addr:" followed by an IP Address and then followed by "P-t-P".
Since it's the address we're concerned with, we store this in
$assignedIPAddress. However, if we have not matched the IP Address and the
count is less than 60, then we add one to the count variable and put the
program to sleep for one second. At this point, we call the same subroutine
again and again until we have a pattern match or we've exceeded the count.
This gives the /sbin/ifconfig command a chance to write out the appropriate
interface information for a PPP connection. Actually, we give the program about
60 seconds to find the IP Address. If we can't find an IP Address, we print out
an error message and exit the program.
<P>Finally, you'll need to configure the Perl script to point to your email
program, as well as set up the "From" and "To" e-mail addresses contained in
the &sendMail subroutine. Simply reassign the $mailService, $from, and $to
variables to match your case.
<P>Now we've come to the final step -- setting up your system to automatically
execute the Perl script. We will accomplish this through the use of the
crontab command. As root, execute the crontab command with the -e option. The
-e option puts you in the edit mode. From here add the following two lines
and save the file:
<BR>
<BR>
<PRE>
<CODE>
00 8 * * 1,2,3,4,5 perl /usr/local/bin/sendMeIP.pl connect
15 12 * * 1,2,3,4,5 perl /usr/local/bin/sendMeIP.pl disconnect
</CODE>
</PRE>
<P>The first of these two lines calls the Perl script at 8:00am, Monday thru
Friday. The second line calls the Perl script to disconnect from the
Internet at 12:15pm, Monday thru Friday. You can check your work in crontab by
executing the crontab command again, but this time passing it the -l option.
For further information on crontab, check out the man pages.
<P>Once you have received the e-mail message at work, you should now be able to connect to your machine via telnet and ftp by using the given IP Address.
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Robert Stagner<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<!--startcut ==========================================================-->
<!-- P --> <HR> <!-- P -->
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html">
<FONT SIZE="+2"><EM>Talkback:</EM> Discuss this article with peers</FONT></A>
<P>
<!-- *** BEGIN navbar *** -->
<A HREF="sipos.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<IMG ALT=""
SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom" >
<A HREF="lg_toc53.html"><IMG ALT="[ Table of Contents ]"
SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<A HREF="../lg_frontpage.html"><IMG ALT="[ Front Page ]"
SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="../lg_faq.html"><IMG ALT="[ FAQ ]"
SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<IMG ALT=""
SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom" >
<A HREF="ward.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<!-- *** END navbar *** -->
</BODY></HTML>
<!--endcut ============================================================-->
|