如何检测网络中断, 并自动重启网卡
本人比较穷,住的是平民窟。所以,要和别人共享网络。很多不厚道的人喜欢用arp 病毒攻击。害的我的网络不是很稳定,经常会断网。断网后,必须,重启网卡网络才能恢复。
一来重启网卡麻烦,每次断网了都要手动重启一下,二来,晚上挂机下载电影,经常下个半个小时,网络就断了,害我白开一晚上电脑。
对window操作系统,我的确是不是很精通,所以,我就换成linux, 这样,写个shell脚本自动检查网络,然后恢复网络。可是linux 也是令人伤心那,好点的下载软件都没有,那个快车,1.0版本的,下载像个鸵鸟一样,太慢了。迅雷,根本就没有。
于是,我听说window 也有一个 shell 而且,还叫做powershell。vista 和 window 7 好像是自带这个shell的。xp估计要安装一下,去google一下就可以了。
观察了一下,这个shell,是基于.NET的。功能特别的强大,有兴趣的可以去研究一下它的语言参考。哥学了1个小时,终于,基本的东西学会了,也就很容易写我的重置网卡的脚本了。
代码
#重置网络:当检查到网络问题以后
#以管理员运行 powershell ,然后 Set-ExecutionPolicy unrestricted
#
do
{
$getway = Get-WmiObject -Class Win32_PingStatus -Filter "Address='192.168.1.1'" -ComputerName . | Where-Object {$_.StatusCode -eq 0};
if ($getway -eq $null)
{
sleep 1;
#重试,防止ping本身发生错误。
$getway = Get-WmiObject -Class Win32_PingStatus -Filter "Address='192.168.1.1'" -ComputerName . | Where-Object {$_.StatusCode -eq 0};
}
if ($getway -eq $null)
{
$adaptor = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*82567LM*"};
$adaptor.Disable();
sleep 5;
$adaptor.Enable();
echo "waiting net work ok ...";
sleep 10; #等待网络修复好,一般10s修复不好,就要重置一下了。
echo "reset adaptor";
}
sleep 2;
echo "net work is ok , sleep 2 second.";
} while(1)
#以管理员运行 powershell ,然后 Set-ExecutionPolicy unrestricted
#
do
{
$getway = Get-WmiObject -Class Win32_PingStatus -Filter "Address='192.168.1.1'" -ComputerName . | Where-Object {$_.StatusCode -eq 0};
if ($getway -eq $null)
{
sleep 1;
#重试,防止ping本身发生错误。
$getway = Get-WmiObject -Class Win32_PingStatus -Filter "Address='192.168.1.1'" -ComputerName . | Where-Object {$_.StatusCode -eq 0};
}
if ($getway -eq $null)
{
$adaptor = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like "*82567LM*"};
$adaptor.Disable();
sleep 5;
$adaptor.Enable();
echo "waiting net work ok ...";
sleep 10; #等待网络修复好,一般10s修复不好,就要重置一下了。
echo "reset adaptor";
}
sleep 2;
echo "net work is ok , sleep 2 second.";
} while(1)
然后,以管理员身份打开powershell ,运行 Set-ExecutionPolicy unrestricted 命令
再运行上面的脚本,就可以了。你就可以放心的挂机。