use strict;
use warnings;
use IO::Socket;

# Das Programm erwartet vier Kommandozeilenparameter
die "Usage: $0 <IP-Adresse> <neue IP-Adresse> "
    . "<neue Netzmaske> <neuer Gateway>\n"
      if ($#ARGV != 3);
my ($port, $newip, $newmask, $newgw) = @ARGV;

# Die dümmsten Vertipper abfangen
die "Fehler in IP-Adresse $newip\n"
   unless ($newip =~ m/(\d+)(\.\d+){3}/);
die "Fehler in Netzmaske $newmask\n"
   unless ($newmask =~ m/(\d+)(\.\d+){3}/);
die "Fehler in Gateway-Adresse $newgw\n"
   unless ($newgw =~ m/(\d+)(\.\d+){3}/);
    
my ($sock, $answer);

$sock = createsocket();
print $sock "GETIP\r\n";
$answer = <$sock>;
chomp($answer); $answer =~ s/\r//;
print "IP-Adresse alt: ", $answer, ",\t neu: ", $newip,"\n";
print $sock "GETMASK\r\n";
$answer = <$sock>;
chomp($answer); $answer =~ s/\r//;
print "Netzmaske  alt: ", $answer, ",\t neu: ", $newmask,"\n";
print $sock "GETGW\r\n";
$answer = <$sock>;
chomp($answer); $answer =~ s/\r//;
print "Gateway    alt: ", $answer, ",\t neu: ", $newgw,"\n";

# Jetzt lasst fahren alle Hoffnung!
print $sock "SETIP $newip\r\n";
$answer = <$sock>;
print "SETIP:   ", $answer;
print $sock "SETMASK $newmask\r\n";
$answer = <$sock>;
print "SETMASK: ", $answer;
print $sock "SETGW $newgw\r\n";
$answer = <$sock>;
print "SETGW: ", $answer;
close($sock);
exit;

sub createsocket
  {
	my $remote_port = '50290';
	my $port = '10.10.10.244';
	my $socket = IO::Socket::INET -> new(PeerAddr => $port,
        	                             PeerPort => $remote_port,
        	                             Proto    => "tcp",
        	                             Type     => SOCK_STREAM)
       or die "Couldn't connect to $port:$remote_port: $@\n";
  return $socket;
  }
