initial commit of file from CVS for e-smith-dynamicdns-dyndns on Wed 12 Jul 08:52:16 BST 2023
This commit is contained in:
73
root/sbin/e-smith/dynamic-dns/dyndns
Executable file
73
root/sbin/e-smith/dynamic-dns/dyndns
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/perl
|
||||
# Description: www.dyndns.com (commercial service)
|
||||
|
||||
######################################################
|
||||
#
|
||||
# Perl implementation of DYNDNS.COM's NamedControl Client.
|
||||
#
|
||||
# by Gunnar Hellekson <ghelleks@herne.drew.edu> 11/2/96
|
||||
#
|
||||
# based (heavily) on p.342 of the 1st Camel book
|
||||
#
|
||||
######################################################
|
||||
|
||||
($ip, $user, $pass, $domain) = @ARGV;
|
||||
|
||||
$AF_INET = 2;
|
||||
$SOCK_STREAM = 1;
|
||||
|
||||
$SIG{'INT'} = 'dokill';
|
||||
|
||||
sub dokill {
|
||||
kill 9,$child if $child;
|
||||
}
|
||||
|
||||
$sockaddr = "S n a4 x8";
|
||||
|
||||
(
|
||||
chop($ip = `/sbin/ifconfig ppp0 | /bin/grep inet | /usr/bin/cut -f2 -d: | /usr/bin/cut -c1-15`) &&
|
||||
$ip =~ s/\s+//g
|
||||
) unless $ip;
|
||||
|
||||
$user = "username" unless $user;
|
||||
$pass = "password" unless $pass;
|
||||
$domain = "dyndns.com" unless $domain;
|
||||
|
||||
# Added by JMorrison so that this works properly for dynamic DNS or
|
||||
# dynamic domain services:
|
||||
|
||||
if ($user ne 'postmaster')
|
||||
{
|
||||
$domain = 'dyndns.com';
|
||||
}
|
||||
|
||||
$info = pack("a20", $user) . pack("a20", $pass) . pack("a16", $ip) . pack("a64", $domain);
|
||||
|
||||
($name, $aliases, $proto) = getprotobyname('tcp');
|
||||
($name, $aliases, $port) = getservbyname(50, 'tcp') unless $port =~ /^d+$/;
|
||||
($name, $aliases, $type, $len, $thisaddr) = gethostbyname(chop($hostname = `/bin/hostname`));
|
||||
($name, $aliases, $type, $len, $thataddr) = gethostbyname("dyndns.com");
|
||||
|
||||
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
|
||||
$that = pack($sockaddr, $AF_INET, 50, $thataddr);
|
||||
|
||||
socket(S, $AF_INET, $SOCK_STREAM, $proto) || die $!;
|
||||
bind(S, $this) || die $!;
|
||||
connect(S,$that) || die $!;
|
||||
|
||||
select(S); $| = 1; select(STDOUT);
|
||||
|
||||
if ($child = fork) {
|
||||
print "Waiting for routing tables to update...\n";
|
||||
sleep 10;
|
||||
print S $info;
|
||||
sleep 3;
|
||||
do dokill();
|
||||
}
|
||||
else {
|
||||
while (<S>) {
|
||||
printf("%s", $_);
|
||||
}
|
||||
print;
|
||||
}
|
||||
|
Reference in New Issue
Block a user