use
strict;
use
Win32 :: SerialPort;
my
$port
=
' COM2 '
;
my
$count
= 0 ;
my
$max_count
= 5 ;
my
$interface
= '
pushd interface ip
set address name=
"local"
source=static addr=192.168.6.185 mask=255.255.255.0
set address name=
"local"
gateway=192.168.6.65 gwmetric=0
set dns name=
"local"
source=static addr=192.168.6.112 register=PRIMARY
add dns name=
"local"
addr=192.168.6.201
index
=2
set wins name=
"local"
source=static addr=none
popd
' ;
sub
errlog {
open
ERR ,
' >>err.log '
;
my
@time
=
localtime
();
my
$time
=
sprintf
(
" %d "
,
$time
[ 5 ] + 1900 )
.
' - '
.
sprintf
(
" %d "
,
$time
[ 4 ] + 1 )
.
' - '
.
" $time[3] "
.
' '
.
sprintf
(
" %.2d "
,
$time
[ 2 ])
.
' : '
.
sprintf
(
" %.2d "
,
$time
[ 1 ])
.
' : '
.
sprintf
(
" %.2d "
,
$time
[ 0 ]);
print
ERR
$time
.
" \n "
;
close
ERR;
}
sub
ipchange {
open
TMP ,
' >tmp '
;
print
TMP
$interface
;
close
TMP;
eval
{
system
' netsh -f tmp '
;
unlink
' tmp '
;
};
if
($@) {
return
0 ;}
return
1 ;
}
my
$ob
= Win32 :: SerialPort -> new(
$port
) or
die
" CANNOT OPEN $port "
;
eval
{
$ob
-> baudrate( 9600 );
$ob
-> parity(
' none '
);
$ob
-> databits( 8 );
$ob
-> stopbits( 1 );
$ob
-> handshake(
' none '
);
};
if
($@) {
die
' SET FAILED '
;}
$ob
-> write_settings or
die
" CANNOT WRITE $port DRIVER "
;
while
( 1 ) {
my
(
$length
,
$result
) =
$ob
->
read
( 10 );
if
(
$result
) {
$count
= 0 ;
}
elsif
(
$count
==
$max_count
) {
errlog();
if
(not ipchange()) {
print
' IP CHANGE FAILED '
; }
last
;
}
else
{
$count
++ ;
}
sleep
( 1 );
}
undef
$ob
;