主流操作系统中给网卡添加内存IP
2013-03-13 11:06
169 查看
因为有些时候项目需要,几大主流操作系统如下:
注:此方法是存在内存中的虚拟IP地址,即非静态,表示重启会丢失。对于静态IP,WINDOWS请参考netsh,Linux请参考setup等设置,AIX请参考smit mktcpip,本文不做讨论,比较简单。
有啥米问题QQ:285979593留言哒
由于WINDOWS没有直接提供内存IP的添加方法,找到API接口我从C++翻译过来的,由于学过一些汇编比较熟一点。下面是源码
添加:
ifcfg add index 192.168.1.2 255.255.255.0
删除:
ifcfg del 192.168.1.2
Linux:
添加:
[root@demo ~]# ifconfig eth0:0 10.0.0.128 netmask 255.255.255.0 up
[root@demo ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:24:21:1D:D8:9E
inet addr:10.0.0.128 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28 Base address:0x6000
删除:
[root@demo ~]# ifconfig eth0:0 down
这里额外提一下双网卡帮定的方式:
[root@hnoracle2 ~]# cd /etc/sysconfig/network-scripts
[root@hnoracle2 network-scripts]# ls
ifcfg-bond0 ifdown-aliases ifdown-post ifup-aliases ifup-ipx ifup-ppp init.ipv6-global
ifcfg-eth0 ifdown-ippp ifdown-ppp ifup-ib ifup-isdn ifup-routes network-functions
ifcfg-eth1 ifdown-ipsec ifdown-sit ifup-ippp ifup-plip ifup-sit network-functions-ipv6
ifcfg-lo ifdown-ipv6 ifdown-sl ifup-ipsec ifup-plusb ifup-sl
ifdown ifdown-isdn ifup ifup-ipv6 ifup-post ifup-wireless
[root@hnoracle2 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
USERCTL=no
[root@hnoracle2 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
USERCTL=no
[root@hnoracle2 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
IPADDR=10.0.0.90
NETMASK=255.255.255.0
NETWORK=10.0.0.0
BROADCAST=10.0.0.255
GATEWAY=10.0.0.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
[root@hnoracle2 cat /etc/rc.local
ifenslave bond0 eth0 eth1
Master 'bond0': Error: handshake with driver failed. Aborting
编辑/etc/modprobe.conf文件,加入以下红色标记的内容
[root@rac4 network-scripts]# vi /etc/modprobe.conf
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
alias scsi_hostadapter2 ata_piix
alias eth0 e1000
alias eth1 e1000
alias bond0 bonding
options bond0 miimon=100 mode=1
说明:
miimon是用来进行链路监测的,比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.
加入/etc/rc.d/rc.local启动项 红色标记内容
[root@rac4 network-scripts]# vi /etc/rc.d/rc.local
#!/bin/sh
# This script. will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style. init stuff.
touch /var/lock/subsys/local
ifenslave bond0 eth0 eth1
启动bond0
[root@rac4 network-scripts]# ifconfig bond0 10.250.7.220 up
重启网络
service network restart
添加路由
route add -net 10.0.0.0 netmask 255.255.255.0 bond0
AIX6.1
添加
lbq:/#>ifconfig en0 172.16.0.205 netmask 255.255.255.0 broadcast 172.16.0.255 alias
lbq:/#>ifconfig en0
en0: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 172.16.0.206 netmask 0xffffff00 broadcast 172.16.0.255
inet 172.16.0.205 netmask 0xffffff00 broadcast 172.16.0.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
删除
lbq:/#>ifconfig en0 172.16.0.205 delete
注:此方法是存在内存中的虚拟IP地址,即非静态,表示重启会丢失。对于静态IP,WINDOWS请参考netsh,Linux请参考setup等设置,AIX请参考smit mktcpip,本文不做讨论,比较简单。
有啥米问题QQ:285979593留言哒
由于WINDOWS没有直接提供内存IP的添加方法,找到API接口我从C++翻译过来的,由于学过一些汇编比较熟一点。下面是源码
include masm32rt.inc include Iphlpapi.inc includelib Iphlpapi.lib include ws2_32.inc includelib ws2_32.lib include masm32.inc includelib masm32.lib include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib include windows.inc include c:\radasm\masm32\macros\macros.asm ;=================================================================================== printf MACRO format:REQ, args:VARARG IFNB <args> invoke crt_printf, cfm$(format), args ELSE invoke crt_printf, cfm$(format) ENDIF EXITM <> ENDM ;=================================================================================== typedef struct { char String[4 * 4]; } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; typedef struct _IP_ADDR_STRING { struct _IP_ADDR_STRING* Next; IP_ADDRESS_STRING IpAddress; IP_MASK_STRING IpMask; DWORD Context; } IP_ADDR_STRING, *PIP_ADDR_STRING; typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO *Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; | IP_ADDRESS_STRING STRUCT String BYTE 16 dup(?) IP_ADDRESS_STRING ENDS IP_MASK_STRING TYPEDEF IP_ADDRESS_STRING IP_ADDR_STRING STRUCT Next DWORD ? IpAddress IP_ADDRESS_STRING <> IpMask IP_MASK_STRING <> Context DWORD ? IP_ADDR_STRING ENDS PIP_ADDR_STRING TYPEDEF PTR IP_ADDR_STRING MAX_ADAPTER_DESCRIPTION_LENGTH equ 128 MAX_ADAPTER_NAME_LENGTH equ 256 MAX_ADAPTER_ADDRESS_LENGTH equ 8 IP_ADAPTER_INFO STRUCT Next DWORD ? ComboIndex DWORD ? AdapterName BYTE MAX_ADAPTER_NAME_LENGTH + 4 dup(?) Description BYTE MAX_ADAPTER_DESCRIPTION_LENGTH + 4 dup(?) AddressLength DWORD ? Address BYTE MAX_ADAPTER_ADDRESS_LENGTH dup(?) Index DWORD ? _Type DWORD ? DhcpEnabled DWORD ? CurrentIpAddress PIP_ADDR_STRING ? IpAddressList IP_ADDR_STRING <> GatewayList IP_ADDR_STRING <> DhcpServer IP_ADDR_STRING <> HaveWins BOOL ? PrimaryWinsServer IP_ADDR_STRING <> SecondaryWinsServer IP_ADDR_STRING <> LeaseObtained DWORD ? LeaseExpires DWORD ? IP_ADAPTER_INFO ENDS MIB_IF_TYPE_OTHER equ 1 MIB_IF_TYPE_ETHERNET equ 6 MIB_IF_TYPE_TOKENRING equ 9 MIB_IF_TYPE_FDDI equ 15 MIB_IF_TYPE_PPP equ 23 MIB_IF_TYPE_LOOPBACK equ 24 MIB_IF_TYPE_SLIP equ 28 CTXT MACRO quoted_text:VARARG EXITM <offset literal(quoted_text)> ENDM ;=================================================================================== MAKELANGID MACRO p,s mov eax, ((((WORD )(s)) << 10) | (WORD )(p)) exitm <eax> endm .const c_ParamNum equ 5 .data outBufLen dd SIZEOF IP_ADAPTER_INFO d_prarmeter dd ? d_ip UINT ? d_mask UINT ? sz_temp db ? ifIndex dd 0 NTEContext dd 0 NTEInstace dd 0 lpMsgBuf LPVOID ? dwRetVal DWORD 0 g_dwParamArray dd c_ParamNum+1 dup(0);存放各命令行参数首地址 g_szCmdLine db 256 dup (?);存放命令行参数 sz_command db 3 dup(?) sz_ip db 15 dup(?) sz_mask db 15 dup(?) sz_delip_command db "interface",10,13, "ip",10,13, "add address ",0 .code GetCmdParam proc lpszCmdLine: LPSTR, lpdwParam: dword local dwFlag: dword local dwParamCount: dword invoke GetCommandLine ;取命令行 invoke lstrcpy, lpszCmdLine, eax mov eax, lpszCmdLine mov esi, eax mov edi, lpdwParam mov dword ptr [edi], eax ;save param 0 add edi, 4 mov dwFlag, 1 mov dwParamCount, 1 @GetCmdParamNext: inc esi movzx eax, byte ptr [esi] cmp eax, 0 je @GetCmdParamRet cmp eax, ' ' ;skip Space jne @F cmp dwFlag, 0 je @GetCmdParamNext jne @GetCmdParamEnd @@: cmp eax, 9 ;skip Tab jne @F cmp dwFlag, 0 jne @GetCmdParamEnd je @GetCmdParamNext @@: cmp eax, '/' jne @F cmp dwFlag, '"' je @GetCmdParamNext jne @GetCmdParamSave @@: cmp eax, '"' jne @F cmp dwFlag, 0 je @GetCmdParamSave inc esi mov dwFlag, 1 jmp @GetCmdParamEnd @@: cmp dwFlag, 0 jne @GetCmdParamNext @GetCmdParamSave: inc dwParamCount cmp dwParamCount, c_ParamNum jg @GetCmdParamRet mov dwFlag, eax mov dword ptr [edi], esi add edi, 4 jmp @GetCmdParamNext @GetCmdParamEnd: cmp dwFlag, '"' je @GetCmdParamNext mov dwFlag, 0 mov byte ptr [esi], 0 jmp @GetCmdParamNext @GetCmdParamRet: ret GetCmdParam endp ;=================================================================================== start: ;=================================================================================== ;printf("SIZEOF IP_ADAPTER_INFO: %d\n\n", outBufLen) mov ebx, alloc(outBufLen) .IF ebx == 0 printf("内存分配错误\n") inkey "Press any key to exit..." exit 1 .ENDIF invoke GetAdaptersInfo, ebx, ADDR outBufLen .IF eax == ERROR_BUFFER_OVERFLOW free ebx mov ebx, alloc(outBufLen) .IF ebx == 0 printf("内存分配错误\n") inkey "Press any key to exit..." exit 1 .ENDIF .ENDIF invoke GetAdaptersInfo, ebx, ADDR outBufLen .IF eax == NO_ERROR mov esi, ebx .WHILE esi printf("\t\n序号: \t%d\n", [esi].IP_ADAPTER_INFO.ComboIndex) ;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{3EB7347E-D1B8-4015-BEB1-CE35E7E0A042}\Connection mov eax, OFFSET IP_ADAPTER_INFO.AdapterName add eax, esi printf("名称: \t%s\n", eax) mov eax, OFFSET IP_ADAPTER_INFO.Description add eax, esi printf("描述: \t%s\n", eax) printf("地址: \t") mov edi, 1 .WHILE edi < [esi].IP_ADAPTER_INFO.AddressLength movzx eax, BYTE PTR [esi+edi-1].IP_ADAPTER_INFO.Address printf("%.2X-", eax) inc edi .ENDW movzx eax, BYTE PTR [esi+edi-1].IP_ADAPTER_INFO.Address printf("%.2X\n", eax) printf("\tIndex: \t%d\n", [esi].IP_ADAPTER_INFO.Index) printf( "\tType: \t") SWITCH [esi].IP_ADAPTER_INFO._Type CASE MIB_IF_TYPE_OTHER printf("Other\n") CASE MIB_IF_TYPE_ETHERNET printf("Ethernet\n") CASE MIB_IF_TYPE_TOKENRING printf("Token Ring\n") CASE MIB_IF_TYPE_FDDI printf("FDDI\n") CASE MIB_IF_TYPE_PPP printf("PPP\n") CASE MIB_IF_TYPE_LOOPBACK printf("Lookback\n") CASE MIB_IF_TYPE_SLIP printf("Slip\n") DEFAULT printf("Unknown type %d\n", [esi].IP_ADAPTER_INFO._Type) ENDSW mov eax, OFFSET IP_ADAPTER_INFO.IpAddressList.IpAddress.String add eax, esi printf("\tIP 地址: \t%s\n", eax) ; mov eax, IP_ADAPTER_INFO.IpAddressList.Next ; mov eax,OFFSET IP_ADAPTER_INFO.IpAddressList.IpAddress[48] ; add eax, esi ; printf("\tIP 地址: \t%s\n", eax) mov eax, OFFSET IP_ADAPTER_INFO.IpAddressList.IpMask.String add eax, esi printf("\t子网掩码: \t%s\n", eax) mov eax, OFFSET IP_ADAPTER_INFO.GatewayList.IpAddress.String add eax, esi printf("\t网关: \t%s\n", eax) printf("\t***\n") .IF [esi].IP_ADAPTER_INFO.DhcpEnabled printf("\tDHCP Enabled: Yes\n") mov eax, OFFSET IP_ADAPTER_INFO.DhcpServer.IpAddress.String add eax, esi printf("\t DHCP Server: \t%s\n", eax) .ELSE printf("\tDHCP Enabled: No\n") .ENDIF .IF [esi].IP_ADAPTER_INFO.HaveWins printf("\tHave Wins: Yes\n") mov eax, OFFSET IP_ADAPTER_INFO.PrimaryWinsServer.IpAddress.String add eax, esi printf("\t Primary Wins Server: %s\n", eax) mov eax, OFFSET IP_ADAPTER_INFO.SecondaryWinsServer.IpAddress.String add eax, esi printf("\t Secondary Wins Server: %s\n", eax) .ELSE printf("\tHave Wins: No\n") .ENDIF printf("\n") mov esi, [esi].IP_ADAPTER_INFO.Next .ENDW .ELSE printf("失败: %d\n", eax) inkey "Press any key to exit..." exit 1 .ENDIF free ebx invoke GetCmdParam, addr g_szCmdLine, addr g_dwParamArray mov edi, offset g_dwParamArray add edi, 4 push edi invoke lstrcpy ,offset sz_command,[edi] pop edi add edi, 4 push edi invoke lstrcpy ,offset ifIndex,[edi] pop edi add edi, 4 push edi invoke lstrcpy ,offset sz_ip,[edi] pop edi add edi,4 invoke lstrcpy ,offset sz_mask,[edi] mov eax, offset sz_ip invoke inet_addr,eax .if eax==INADDR_NONE printf("IP Adress不是一个有效的值 %d\n", eax) .endif mov d_ip,eax mov eax, offset sz_mask invoke inet_addr,eax .if eax==INADDR_NONE printf("MASK不是一个有效的值 %d\n", eax) .endif mov d_mask,eax invoke AddIPAddress, d_ip, d_mask,uval(offset ifIndex),offset NTEContext,offset NTEInstace .if eax==NO_ERROR printf("IPv4 address successfully added.\n") .else printf("IPv4 address add failure.\n") .endif printf("\t\n-------------------------------------------\t\n") printf("ifcfg add index 192.168.1.2 255.255.255.0") exit 0 end start
添加:
ifcfg add index 192.168.1.2 255.255.255.0
删除:
ifcfg del 192.168.1.2
Linux:
添加:
[root@demo ~]# ifconfig eth0:0 10.0.0.128 netmask 255.255.255.0 up
[root@demo ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:24:21:1D:D8:9E
inet addr:10.0.0.128 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28 Base address:0x6000
删除:
[root@demo ~]# ifconfig eth0:0 down
这里额外提一下双网卡帮定的方式:
[root@hnoracle2 ~]# cd /etc/sysconfig/network-scripts
[root@hnoracle2 network-scripts]# ls
ifcfg-bond0 ifdown-aliases ifdown-post ifup-aliases ifup-ipx ifup-ppp init.ipv6-global
ifcfg-eth0 ifdown-ippp ifdown-ppp ifup-ib ifup-isdn ifup-routes network-functions
ifcfg-eth1 ifdown-ipsec ifdown-sit ifup-ippp ifup-plip ifup-sit network-functions-ipv6
ifcfg-lo ifdown-ipv6 ifdown-sl ifup-ipsec ifup-plusb ifup-sl
ifdown ifdown-isdn ifup ifup-ipv6 ifup-post ifup-wireless
[root@hnoracle2 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
USERCTL=no
[root@hnoracle2 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
USERCTL=no
[root@hnoracle2 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
IPADDR=10.0.0.90
NETMASK=255.255.255.0
NETWORK=10.0.0.0
BROADCAST=10.0.0.255
GATEWAY=10.0.0.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
[root@hnoracle2 cat /etc/rc.local
ifenslave bond0 eth0 eth1
Master 'bond0': Error: handshake with driver failed. Aborting
编辑/etc/modprobe.conf文件,加入以下红色标记的内容
[root@rac4 network-scripts]# vi /etc/modprobe.conf
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptspi
alias scsi_hostadapter2 ata_piix
alias eth0 e1000
alias eth1 e1000
alias bond0 bonding
options bond0 miimon=100 mode=1
说明:
miimon是用来进行链路监测的,比如:miimon=100,那么系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。
mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。
mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.
加入/etc/rc.d/rc.local启动项 红色标记内容
[root@rac4 network-scripts]# vi /etc/rc.d/rc.local
#!/bin/sh
# This script. will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style. init stuff.
touch /var/lock/subsys/local
ifenslave bond0 eth0 eth1
启动bond0
[root@rac4 network-scripts]# ifconfig bond0 10.250.7.220 up
重启网络
service network restart
添加路由
route add -net 10.0.0.0 netmask 255.255.255.0 bond0
AIX6.1
添加
lbq:/#>ifconfig en0 172.16.0.205 netmask 255.255.255.0 broadcast 172.16.0.255 alias
lbq:/#>ifconfig en0
en0: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 172.16.0.206 netmask 0xffffff00 broadcast 172.16.0.255
inet 172.16.0.205 netmask 0xffffff00 broadcast 172.16.0.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
删除
lbq:/#>ifconfig en0 172.16.0.205 delete
相关文章推荐
- Linux 安装操作系统后添加网卡
- CentOS单网卡绑定多IP,添加新IP的方法
- 如何在linux网卡上添加多个IP
- linux查看硬件信息、cpu、内存、操作系统、发行版本、机器型号、网卡信息等
- Debian下一个网卡绑定多个ip的方法 &amp;amp;amp; 添加路由
- 为linux网卡添加多个IP
- ceph存储 centos下添加多个虚拟ip地址的方法(一个网卡)
- edhat/Centos第二块网卡添加/绑定IP
- c++获取系统信息(操作系统,cpu,内存,ip,mac)
- Centos系统下 批量添加IP到网卡上
- linux查看硬件信息、cpu、内存、操作系统、发行版本、机器型号、网卡信息等
- Linux操作系统单网卡双IP的设置
- linux系统中单网卡添加多个ip
- Linux操作系统单网卡双IP的设置
- Linux 一个网卡添加多个IP
- Linux 一个网卡添加多个IP
- Debian下一个网卡绑定多个ip的方法及 添加路由
- Linux 查看CPU/内存/网卡/操作系统信息
- Windows 2003和Windows 2008服务器双线双IP双网卡设置(不需要添加静态路由)
- 一个网卡设置多个ip,添加网关;一个虚拟机添加多个网卡