相同IP和Mac地址的问题

其实是可以的,你完全可以把两台电脑的IP 和MAC改成一样,不但可以上网而且还没IP冲突。这种方法不但可以突破路由封锁用在ADSL共享上网,而且还可以用在IEEE802.1X认证上网的环 境中,但是前提必须要用相同的帐号来拨号上网(前提认证服务器没设验证帐号的重复性),我的机子是通过学校校园网接入internet的,客户端采用 802.1x认证客户端软件“STAR Supplicant拨号软件”来拨号上网,在我们学校里可以将两台机子的IP和MAC改成一样然后用相同的一个帐号来达到共享上网的目的,不过在我们学 校只可以在同一个宿舍的两台机子才可以共享上网,因为我们学校的服务器不单止验证帐号,ip,MAC而且还验证接入服务器IP(NAS IP),和接入服务器端口(NAS port),不同的宿舍接在学校交换机不同的端口,所以只限于同一个宿舍用这种法共享上网。
  至于为什么不会引起IP冲突而且还能上网,这是因为ARP工作的缺陷,系统之所以会发现网上有相的IP的而提示“IP冲突”,是因为系统在启动 时,TCP/IP中的ARP会广播一个免费ARP(free arp)请求包到网段上,这个ARP(free arp)包包含自己的IP和MAC,如果网段上有机子回应了这个包,这台发广播的机子就会认为局域网有别的机子使用和自己相同的IP,
  例如:PC A和PC B的IP和MAC完全一样,PCA的系统启动时会广播一个包含自己IP和MAC的免费ARP(free arp)请求包到网段上,如果PCB回应了这个请求,PCA会认为自己的IP和网络上的IP有冲突并发出提示(这就是为什么IP冲突一般发生系统刚启动完 成时),问题是PCB根本不会回应这个请求包,这是因为这个请求包的IP和MAC和PCB自己的完全一样,而PCB会认为是自己发的包,所以不会回应,既 然不会回应自然不会发生IP冲突了。
  好了,让我来解释下一个问题,就是两台机子的IP和MAC一样到底会不会导致不能上网:
既然可以,那么网络上的硬件设备是怎样区份这些数据到底是哪台机的呢??大家都知道局域网内是用硬件地址来通迅的,局域网的二层设备(如交换机)维护着一 张地址表,地址表记录着本设备每个端口所对应的MAC(注:不是端口的MAC,而是端口所连设备的MAC),设备要经过地址学习状态才能知道这些端口所对 应的MAC,当一个帧经过设备的某介端口时,设备会检查该帧源地址和目的地址,然后再对照自己的地址表,看地址表中是否存在该源地址的对应项,若不存在则 端口会变为“地址学习状态”,将该地址保存在地址表中组成一个新的表项,如果PCA和PCB都连在同一个交换机上,则交换机经过“地址学习状态”后,地址 表中存在两个相同的地址项,不过它们所对应的端口是不同的,当交换机在外部接收到一个目的地址为该地址(PCA和PCB相同的MAC地址)的帧时,则会检 查地址表,检查地址表后会发现存在两个相同地址的表项,于是交换机会将该帧转发到这两个表项所对应的端口,(至于交换机是用组播的方式还是说用一个帧发两 遍的方式转发给这两个端口我就不太清楚了,若你道就告诉我一下,好吗QQ63405627)。
  路由器也一样,不同是的路由器的地址表是路由表,存放的是IP而不是硬件地址。
  连接这两个端口的PCA和PCB都会收到同样的帧,既然会收到同样的帧,那么计算机怎样才知道哪些帧才是自己想要的呢?这取决于工作在TCP/ip上 层协议,虽然网卡是接收了这个帧,但是上层的协议进行进一步的分用,也可以说成是过滤,当TCP/IP的网络接口层(也叫链路层)收到一个帧,会检查帧头 中的帧类型,如果是ARP类型的就交给ARP协议去处理,如果是RARP类型就会交给RARP协议处理,如果是IP类型会去掉帧头并把这个帧传给上一层 (即网络层来处理),网络层会根据包头(去掉帧头就叫IP包了)中的协议类型来分用,如是TCMP类型就交给ICMP协议处理,如果是IGMP类型就交给 IGMP协议处理,如果是TCP或UDP就把包头去掉并交给上一层(即传输层)来片理 ,去掉IP包头后就叫做报文分段了(传输层的单位),同样传输层也会对报文分段的头部进行检查从而进行进一步的分用,如果是TCP类型的交给TCP协议处 理,如果是UDP类型就交给UDP协议处理,TCP或UDP会根据报文分段的头部中的“目的端口号”来交给应用层(交给应用层前会把报文分段的头部去 掉),然后应用层的用户进程会根据该“端口号”来决是否接收这个数据,例如QQ某个进程打开了UDP 1324这个端口,传输层的UDP协议会把所有接收到的且“目的端口号”为1324的报文分段交给QQ的这个进程, 这样就完成接收数据的整个过程。虽然两台电脑都会接收到不是属于自己的数据帧,但是在把帧交给上层协议片理时有可能会被丢充,就如应用层的QQ进程不会接 到除“目的端口号”为1324以外的其它数据包,因为这些数据在应用层前已经被丢弃。

时间: 2024-10-01 15:01:43

相同IP和Mac地址的问题的相关文章

java 获取本机ip及mac地址

package com.achun.test; import java.net.Inet4Address;import java.net.Inet6Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration; public class HelloWorld { public static void main(String[] args) { // TODO Au

Android -- 获取IP和MAC地址

通过InetAddress.getLocalHost()得到始终是"127.0.0.1",要想得到真正的网络ip地址要通过下面的方法: 首先新建一个工程,修改AndroidManifest.xml文件增加用户权限,如下: <uses-permission android:name="android.permission.INTERNET"/> <!--必写--> <uses-permission android:name="a

C#获取IP及MAC地址 方法

C#获取IP及MAC地址 方法,比较齐全 using System.Net; using System; using System.Management; using System.Runtime.InteropServices; public class getIP { [DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int

获取本机IP、mac地址、计算机名

python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid >>> def get_mac_address(): mac = uuid.UUID(int = uuid.getnode()).hex[-12:] return ':'.join([mac[e:e+2] for e in range(0,11,2)]) >>> get_m

绑定网关IP和MAC地址时显示“ARP项添加失败:拒绝访问”的处理方法

绑定网关IP和MAC地址时显示"ARP项添加失败:拒绝访问" Win7系统,用arp -s命令在绑定网关IP和MAC地址时,总是提示 ARP 项添加失败: 拒绝访问.( 用管理员身份运行cmd也无效.)未找到原因. 后来google找到了另一个命令,搞定! 具体操作如下: 1.CMD中输入: netsh i i show in 然后找到本地连接对应 我的是Win7系统,今天用arp -s命令在绑定网关IP和MAC地址时,总是提示"ARP 项添加失败: 拒绝访问."(

获取IP和mac地址

1.获取IP static string GetLocalIp() { string hostname = Dns.GetHostName();//得到本机名 //IPHostEntry localhost = Dns.GetHostByName(hostname);//方法已过期,只得到IPv4的地址 IPHostEntry localhost = Dns.GetHostEntry(hostname); IPAddress localaddr = localhost.AddressList[0

linux 下C实现获取网卡IP和MAC地址

本文使用getifaddrs 函数获取网卡的IP和MAC地址.getifaddrs函数有个特点,就是获取地址时以链表方式返回,且每个链表节点要么是IP,要么是MAC,所以如果要将网卡的IP和MAC地址同时返回的话,需要对对返回链表进行查找和重新组合.本文实现目的,在于以网卡名方式返回IP和MAC地址.代码如下: #ifndef _MYLIB_H #define _MYLIB_H #include <stdlib.h> #include <errno.h>   #define err

获得Unix/Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 作者:diaoyf  |  文章来源:http://programmerdigest.cn 实际环境和特殊需求往往会将简单问题复杂化,比如计算机IP地址,对于一个连接中socket,可以直接获得本端和对端的IP.端口信息.但在一些特殊场合我们可能需要更多的信息,比如系统中有几块网卡,他们的Mac地

同一网段是否可以做到ip与mac地址都相同?

同一网段是否可以做到ip与mac地址都相同. 其实是可以的,你完全可以把两台电脑的IP 和MAC改成一样,不但可以上网而且还没IP冲突.这种方法不但可以突破路由封锁用在ADSL共享上网,而且还可以用在IEEE802.1X认证上网的环 境中,但是前提必须要用相同的帐号来拨号上网(前提认证服务器没设验证帐号的重复性),我的机子是通过学校校园网接入internet的,客户端采用 802.1x认证客户端软件“STAR Supplicant拨号软件”来拨号上网,在我们学校里可以将两台机子的IP和MAC改成

java获取mac地址-屏蔽ip封mac地址

首先要说的是:可以支持外网机器的mac地址获取.  以前弄了一个只能访问局域网. 有防火墙就访问不了, 但是这个不用担心了. 测试了百度的ip,已经可以获得mac地址 测试效果图: java通过ip获取mac地址-封ip封mac地址 版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载.