有了它改ip不怕不怕了

大家都知道,如果是笔记本换一个环境上网就得改ip,gateway,dns,network等信息。今天就按两种不同环境实现之。
   从前有一个人他叫王二,王二的工作有两个地点甲地,乙地,他用的办公工具是笔记本,由于工作需要他每天在两地之间穿梭不下于十次。这个王二很头痛啊,他每到一个地方都得改一次ip。这叫我们王二挺为难的,一天改十多次ip,叫谁谁也难受,为了帮助王二解决这个问题,我们来分析一下。

更据ip获取的方式分析一共有一下几种情况:
1.甲地是动态获取ip,乙地也是动态获取ip

2.甲地是动态获取ip,乙地是静态获取ip
乙地网络环境:
ip 192.168.1.2  netmask 255.255.255.0 gateway 192.168.1.1 dns 202.176.32.1

3.甲地是静态获取ip,乙地是动态获取ip
甲地网络环境:
ip 10.22.123.33  netmask 255.255.255.0 gateway 10.22.123.1 dns 201.34.16.1

4.甲地是静态获取ip,乙地也是静态获取ip
甲地网络环境:
ip 10.22.123.33  netmask 255.255.255.0 gateway 10.22.123.1 dns 201.34.16.1
乙地网络环境:
ip 192.168.1.2  netmask 255.255.255.0 gateway 192.168.1.1 dns 202.176.32.1

下面对这四种情况依次讨论之

A.对于第一种情况很好解决,只需一个简单的脚本,下面分别以两个操作系统linux,windows说一下解决方案:
linux 操作系统
脚本为
vim set_auto_ip.sh
#!/bin/bash
sed -i
s@BOOTPROTO=.*@BOOTPROTO=dhcp@g /etc/sysconfig/network-scripts/ifcfg-eth0
#重启网络服务
service network restart
#验证
ifconfig eth0

保存后退出

chmod u+x set_auto_ip.sh  #改脚本的执行权限,只需一次即可
bash set_auto_ip.sh       #执行脚本

windows 操作系统
脚本为
set_auto_ip.bat
@echo off
rem eth为网卡名称,可在网络连接中查询,如"本地链接"
set eth="本地连接"

echo 正在修改IP为自动获取,请稍候

rem ip动态获取
cmd /c netsh interface ip set address %eth% dhcp
 
rem dns动态获取
cmd /c netsh interface ip set dns %eth%  dhcp    

pause

脚本执行 : 以管理员的的身份双击运行之

解释:
@echo off 意思是不显示下面的命令
rem 的作用是注释作用,只对读代码有用
pause 的作用是让对话框暂停

B.第二种情况甲地是动态获取ip,乙地是静态获取ip 

linux操作系统

新建脚本文件set_static_auto_ip.sh
vim set_static_ip.sh
#!/bin/bash
#choice 1 to set static ip , choice 2 to set dynamic ip....
declare -i A  #变量的申明
read -p "输入“1”为乙获得静态ip,输入“2”为甲获得动态(default[2]):" A 
#这里有一个小技巧,当不输入值时默认是“2”动态获取
if [ "$A" != 1 ] && [ "$A" != "2" ];then
       A=2
fi

if [ "$A" == "1" ];then
    #该网卡获取ip类型static(静态)
    sed -i
s@BOOTPROTO=.*@BOOTPROTO=static@g /etc/sysconfig/network-scripts/ifcfg-eth0    
    #改ip
    sed -i
s@IPADDR=.*@IPADDR=192.168.1.2@g /etc/sysconfig/network-scripts/ifcfg-eth0
    #设置子网掩码
    sed -i
s@NETMASK=.*@BOOTPROTO=255.255.255.0@g /etc/sysconfig/network-scripts/ifcfg-eth0
    #设置网关
    sed -i
s@GATEWAY=.*@GATEWAY=192.168.1.1@g /etc/sysconfig/network-scripts/ifcfg-eth0
    #设置dns
    sed -i
s@nameserver.*@nameserver\202.176.32.1@g /etc/resolv.conf
    #重启网络服务
    service network restart
    #验证是否成功
    ifconfig eth0
elif [ "$A" ==  "2" ];then
    #改为动态获取ip,这里只需改获取ip的形式为dhcp即可,只要为dhcp其他的不起作用
    sed -i
s@BOOTPROTO=.*@BOOTPROTO=dhcp@g /etc/sysconfig/network-scripts/ifcfg-eth0
  #重启网络服务
    service network restart
  #验证
    ifconfig eth0
else
     echo "your choice is worng..." 
fi

保存退出
chmod u+x set_static_ip.sh  #改脚本的执行权限
bash set_static_ip.sh       #执行脚本

解释:
sed是一种在线编辑器,它一次处理一行内容。
“.”:任意一个字符 

“*”:重复零个或多个前一个重复的字符 

“.*”:任意字符 

“@”:是分隔符,只要与其他字符没有歧义即可,分隔符可以是“/ # % ”等 

“\”:是转义字符,这里主要是转义空格

windows 操作系统
新建脚本文件
set_static_auto_ip.bat

@echo off
echo ---------------------------------------------------------------------
echo "A为乙静态获取ip,B为甲动态获取ip"
echo ---------------------------------------------------------------------
set choice
set /p choice=请输入A 或B,然后回车:
if "%choice%"=="A" goto yi
if "%choice%"=="B" goto jia
:yi
rem eth 为网卡名称,可在网络连接中查询,如"本地链接"
set eth="本地连接"
rem ip为你想更改的IP
set ip=192.168.1.2

rem gateway 为网关地址
set gateway=192.168.1.1

rem netmasks //netmasks 为子网掩码
set netmasks=255.255.255.0
rem dns 为首选DNS
set dns=202.176.32.1

echo 正在将本机IP更改到: %ip% 请等候...

rem   校验
if %gateway%==none netsh interface ip set address %eth% static %ip% %netmasks% %gateway% > nul
if not %gateway%==none netsh interface ip set address %eth% static %ip% %netmasks% %gateway% 1 > nul
if %dns%==none netsh interface ip set dns %eth% static %dns%> nul
if not %dns%==none netsh interface ip set dns %eth% static %dns%> nul

echo.........................
echo 检查当前本机IP:
ipconfig

echo.........................
echo 成功将本机IP更改为: %ip%

pause
exit
:jia
set eth="本地连接"

echo 正在修改IP为自动获取,请稍候
rem ip动态获取
cmd /c netsh interface ip set address %eth% dhcp 
rem dns动态获取
cmd /c netsh interface ip set dns %eth%  dhcp    

echo ----------------------------------------------------
echo                    动态获取IP设置成功!
echo ----------------------------------------------------
pause
exit

脚本执行:以管理员的的身份双击运行之

解释:上述脚本用到跳转goto,当输入A时goto到:yi 对乙静态ip获取之后exit退出;当输入B时goto到:jia 对甲动态ip获取之后exit退出

C.对于第三种情况 甲地是静态获取ip,乙地是动态获取ip。这种情况与第二种差不多,在这里不再做详细介绍

D.对于第四种情况 甲地是静态获取ip,乙地也是静态获取ip ,只要前几种情况搞懂了这种情况也是小菜,下面来介绍之。
linux操作系统

新建脚本set_static_ip.sh 这里不再解释每句话的意识,以上已经介绍过了
vim set_static_ip.sh
#!/bin/bash
#choice 1 to set static ip , choice 2 to set dynamic ip....
declare -i A  #变量的申明
read -p "输入“1”为乙获得静态ip,输入“2”代表甲获得静态ip(default[2]):" A 

if [ "$A" != 1 ] && [ "$A" != "2" ];then
       A=2
fi

if [ "$A" == "1" ];then
 
    sed -i
s@BOOTPROTO=.*@BOOTPROTO=static@g /etc/sysconfig/network-scripts/ifcfg-eth0    
 
    sed -i
s@IPADDR=.*@IPADDR=192.168.1.2@g /etc/sysconfig/network-scripts/ifcfg-eth0
  
    sed -i
s@NETMASK=.*@BOOTPROTO=255.255.255.0@g /etc/sysconfig/network-scripts/ifcfg-eth0
 
    sed -i
s@GATEWAY=.*@GATEWAY=192.168.1.1@g /etc/sysconfig/network-scripts/ifcfg-eth0

    sed -i s@nameserver.*@nameserver\202.176.32.1@g /etc/resolv.conf
  
    service network restart
  
    ifconfig eth0
elif [ "$A" ==  "2" ];then
    sed -i
s@BOOTPROTO=.*@BOOTPROTO=static@g /etc/sysconfig/network-scripts/ifcfg-eth0    
 
    sed -i
s@IPADDR=.*@IPADDR=10.22.123.33@g /etc/sysconfig/network-scripts/ifcfg-eth0
  
    sed -i
s@NETMASK=.*@BOOTPROTO=255.255.255.0@g /etc/sysconfig/network-scripts/ifcfg-eth0
 
    sed -i
s@GATEWAY=.*@GATEWAY=10.22.123.1@g /etc/sysconfig/network-scripts/ifcfg-eth0

    sed -i s@nameserver.*@nameserver\201.34.16.1@g /etc/resolv.conf
  
    service network restart
  
    ifconfig eth0
else
     echo "your choice is worng..." 
fi

保存退出
chmod u+x set_static_ip.sh
bash set_static_ip.sh

windows操作系统

新建脚本 set_static_ip.bat

@echo off
echo ---------------------------------------------------------------------
echo "A为乙静态获取ip,B为甲静态获取ip"
echo ---------------------------------------------------------------------
set choice
set /p choice=请输入A 或B,然后回车:
if "%choice%"=="A" goto yi
if "%choice%"=="B" goto jia
:yi
rem eth 为网卡名称,可在网络连接中查询,如"本地链接"
set eth="本地连接"
rem ip为你想更改的IP
set ip=192.168.1.2

rem gateway 为网关地址
set gateway=192.168.1.1

rem netmasks //netmasks 为子网掩码
set netmasks=255.255.255.0
rem dns 为首选DNS
set dns=202.176.32.1

echo 正在将本机IP更改到: %ip% 请等候...

rem
if %gateway%==none netsh interface ip set address %eth% static %ip% %netmasks% %gateway% > nul
if not %gateway%==none netsh interface ip set address %eth% static %ip% %netmasks% %gateway% 1 > nul
if %dns%==none netsh interface ip set dns %eth% static %dns%> nul
if not %dns%==none netsh interface ip set dns %eth% static %dns%> nul

echo.........................
echo 检查当前本机IP:
ipconfig

echo.........................
echo 成功将本机IP更改为: %ip%

pause
exit

:jia

rem eth 为网卡名称,可在网络连接中查询,如"本地链接"
set eth="本地连接"
rem ip为你想更改的IP
set ip=10.22.123.33

rem gateway 为网关地址
set gateway=10.22.123.1

rem netmasks 为子网掩码
set netmasks=255.255.255.0
rem dns 为首选DNS
set dns=201.34.16.1
echo 正在将本机IP更改到: %ip% 请等候...

rem
if %gateway%==none netsh interface ip set address %eth% static %ip% %netmasks% %gateway% > nul
if not %gateway%==none netsh interface ip set address %eth% static %ip% %netmasks% %gateway% 1 > nul
if %dns%==none netsh interface ip set dns %eth% static %dns%> nul
if not %dns%==none netsh interface ip set dns %eth% static %dns%> nul

echo.........................
echo 检查当前本机IP:
ipconfig

echo.........................
echo 成功将本机IP更改为: %ip%

pause
exit

Ok,It's over!!!