大家都知道,如果是笔记本换一个环境上网就得改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
原文出处:http://linuxme.blog.51cto.com/1850814/393341