C语言写ARP欺骗

Python09

C语言写ARP欺骗,第1张

#include <stdafx.h>

#include "iostream"

#include "fstream"

#include "string"

#include "windows.h"

#include "Iphlpapi.h"

#pragma comment(lib , "IpHlpApi.lib")

#pragma comment(lib , "ws2_32.lib")

#define MACFILE "mac.ini" //mac配置文件

#define GATEWAY "gateway.ini"//网关地址文件

using namespace std

int main(int argc,char * argv[])

{

string ipadd

string macadd

char bc

//读取网关ip地址

fstream _ipadd

_ipadd.open(GATEWAY,ios::in)

while(_ipadd.get(bc))

{

ipadd+=bc

}

cout <<"ARP欺骗检查工具 By:Neeao \n"

cout <<"网关IP:" <<ipadd <<endl

int iReturn

DWORD dwIP

BYTE byMAC[6]

DWORD dwLen

WSADATA WsaData

WSAStartup(MAKEWORD(2, 0), &WsaData)

dwIP = inet_addr(ipadd.c_str())

//cout <<dwIP <<"\n"

if (dwIP == INADDR_NONE)

{

cout <<"IP地址出错: " <<ipadd

return 1

}

//循环获取mac地址

while(TRUE)

{

// 发送ARP查询包获得 MAC 地址

dwLen = 6

iReturn = SendARP(dwIP, 0, (PULONG) &byMAC, &dwLen)

if (iReturn != NO_ERROR)

{

printf("出错了:只能获取当前网关下主机的MAC地址.\n", argv[1])

//__leave

return 1

}

char MACadd[50]

sprintf(MACadd,"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",byMAC[0],byMAC[1],byMAC[2],byMAC[3],byMAC[4],byMAC[5])

//cout <<MACadd

//判断macadd是否为空,不为空直接跳过

if(macadd=="")

{

fstream _mac

_mac.open(MACFILE,ios::in)

if(!_mac)

{

//cout<<MACFILE<<"没有被创建"

//第一次运行写入mac地址,为初始mac地址。

fstream _macr

_macr.open(MACFILE,ios::out|ios::app)

if(!_macr)

{

cout<<"文件创建失败,磁盘不可写或者文件为只读!"

exit(1)

}

_macr <<MACadd

_macr.close()

macadd = MACadd

}

else

{

char ch

string content

while(_mac.get(ch))

{

content+=ch

}

_mac.close()

macadd = content

cout<<"MAC地址为:" <<content<<endl

}

}

//判断mac地址

if(macadd==MACadd)

{

cout <<"ok\n"

//return 1

}else

{

cout <<"MAC地址被修改了\n"

//return 1

}

Sleep(2000)//每2秒钟获取一次

}

return 0

}

故障现象:机器以前可正常上网的,突然出现可认证,不能上网的现象(无法ping通网关),重启机器或在MSDOS窗口下运行命令ARP -d后,又可恢复上网一段时间。 故障原因:这是APR病毒欺骗攻击造成的。 引起问题的原因一般是由传奇外挂携带的ARP木马攻击。当在局域网内使用上述外挂时,外挂携带的病毒会将该机器的MAC地址映射到网关的IP地址上,向局域网内大量发送ARP包,从而致使同一网段地址内的其它机器误将其作为网关,这就是为什么掉线时内网是互通的,计算机却不能上网的原因。 临时处理对策: 步骤一. 在能上网时,进入MS-DOS窗口,输入命令:arp –a 查看网关IP对应的正确MAC地址,将其记录下来。 注:如果已经不能上网,则先运行一次命令arp –d将arp缓存中的内容删空,计算机可暂时恢复上网(攻击如果不停止的话),一旦能上网就立即将网络断掉(禁用网卡或拔掉网线),再运行arp –a。 步骤二. 如果已经有网关的正确MAC地址,在不能上网时,手工将网关IP和正确MAC绑定,可确保计算机不再被攻击影响。手工绑定可在MS-DOS窗口下运行以下命令: arp –s 网关IP 网关MAC 例如:假设计算机所处网段的网关为218.197.192.254,本机地址为218.197.192.1在计算机上运行arp –a后输出如下: C:\Documents and Settings>arp -a Interface: 218.197.192.1 --- 0x2 Internet Address Physical Address Type 218.197.192.254 00-01-02-03-04-05 dynamic 其中00-01-02-03-04-05就是网关218.197.192.254对应的MAC地址,类型是动态(dynamic)的,因此是可被改变。被攻击后,再用该命令查看,就会发现该MAC已经被替换成攻击机器的MAC,如果大家希望能找出攻击机器,彻底根除攻击,可以在此时将该MAC记录下来,为以后查找做准备。 手工绑定的命令为: arp –s 218.197.192.254 00-01-02-03-04-05 绑定完,可再用arp –a查看arp缓存, C:\Documents and Settings>arp -a Interface: 218.197.192.1 --- 0x2 Internet Address Physical Address Type 218.197.192.254 00-01-02-03-04-05 static 这时,类型变为静态(static),就不会再受攻击影响了。但是,需要说明的是,手工绑定在计算机关机重开机后就会失效,需要再绑定。所以,要彻底根除攻击,只有找出网段内被病毒感染的计算机,令其杀毒,方可解决。找出病毒计算机的方法: 如果已有病毒计算机的MAC地址,可使用NBTSCAN软件找出网段内与该MAC地址对应的IP,即病毒计算机的IP地址,然后可报告校网络中心对其进行查封。 NBTSCAN的使用方法:下载nbtscan.rar到硬盘后解压,然后将cygwin1.dll和nbtscan.exe两文件拷贝到c:\windows\system32(或system)下,进入MSDOS窗口就可以输入命令: nbtscan -r 218.197.192.0/24 (假设本机所处的网段是218.197.192,掩码是255.255.255.0;实际使用该命令时,应将斜体字部分改为正确的网段) 。 注:使用nbtscan时,有时因为有些计算机安装防火墙软件,nbtscan的输出不全,但在计算机的arp缓存中却能有所反应,所以使用nbtscan时,还可同时查看arp缓存,就能得到比较完全的网段内计算机IP与MAC的对应关系。 补充一下: Anti ARP Sniffer 使用说明 一、功能说明: 使用Anti ARP Sniffer可以防止利用ARP技术进行数据包截取以及防止利用ARP技术发送地址冲突数据包。 二、使用说明: 1、ARP欺骗: 填入网关IP地址,点击〔获取网关mac地址〕将会显示出网关的MAC地址。点击[自动防护]即可保护当前网卡与该网关的通信不会被第三方监听。 注意:如出现ARP欺骗提示,这说明攻击者发送了ARP欺骗数据包来获取网卡的数据包,如果您想追踪攻击来源请记住攻击者的MAC地址,利用MAC地址扫描器可以找出IP 对应的MAC地址。 2、IP地址冲突 首先点击“恢复默认”然后点击“防护地址冲突”。 如频繁的出现IP地址冲突,这说明攻击者频繁发送ARP欺骗数据包,才会出现IP冲突的警告,利用Anti ARP Sniffer可以防止此类攻击。 首先您需要知道冲突的MAC地址,Windows会记录这些错误。查看具体方法如下: 右击[我的电脑]-->[管理]-->点击[事件查看器]-->点击[系统]-->查看来源为[TcpIP]--->双击事件可以看到显示地址发生冲突,并记录了该MAC地址,请复制该MAC地址并填入Anti ARP Sniffer的本地MAC地址输入框中(请注意将:转换为-),输入完成之后点击[防护地址冲突],为了使MAC地址生效请禁用本地网卡然后再启用网卡,在CMD命令行中输入Ipconfig /all,查看当前MAC地址是否与本地MAC地址输入框中的MAC地址相符。如果成功将不再会显示地址冲突。 注意:如果您想恢复默认MAC地址,请点击[恢复默认],为了使MAC地址生效请禁用本地网卡然后再启用网卡。

1 ARP病毒---导致网络(ping)时断时通---解决办法

ARP病毒解决办法

决战ARP病毒arp -s 192.168.1.1 08-10-17-f8-6a-4b

从上周起,在单位上网时发生的怪事就一直困扰着我,起初以为是网络不稳定才出现时断时续的现象,并没有引起我太大的注意,可事过两天,该现象却越来越严重,发生频率也是越来越高,同时其他同事的电脑也是同样无法正常上网,故障跟我的一模一样,这引起了我的注意,于是决定把这个问题调查个水落石出。

初期的判断主要是围绕着我自己的电脑展开,在进行了查毒和系统的重装后,竟然问题依旧,难道问题不是出在我这台电脑上吗?带着问题我打开了百度的搜索网页,查了一下网络时断时续的相关资料,果然这种现象是近期的一个热点,原因是中了一种arp的木马病毒,它的原理是将网关的MAC地址改写,直接导致访问网关的电脑无法正确找到网关设备,使网络无法正确连接而造成网络瘫痪。经过进一步调查发现,该木马程序的出现是局域网内有人使用ARP欺骗的木马程序(比如:传奇盗号的软件,某些传奇外挂中也被恶意加载了此程序)。而现象却是网络内所有的电脑都无法正确访问网关导致无法上网,所以单从自己的电脑发向去调查,肯定会是毫无收获的,因为自己的电脑也只是受害电脑之一。

解决方案有两种:

一是临时应急型,可暂时解决不能上网的问题,而不是彻底清除病毒:只需使用Windows系统自带的arp命令即可完成。方法如下:点击开始,运行,输入“arp -s 网关地址 网关MAC地址”,这样即可使网关地址与真正的网关MAC地址绑定,使得局域网内病毒主机无法再进行干扰!但问题是此方法在计算机重启后自动失效,想再次使用必须重复上述操作。

二是彻底清除型,此方法必须将网内受感染的病毒主机找出,若局域网只连几台电脑,则查找难度则很低,只要将病毒主机查出并杀毒即可解决问题。但局域网若是带了几十甚至几百台电脑主机时,查找的难度则会增加很多……

问题既然找出,下一步就要搜查病毒主机了。由于单位上网的小局域网内只连有五、六台左右的电脑,这使查找难度降低很多。但也并非一帆风顺,因为病毒主机伪装的MAC地址并没有使用它自己的网卡MAC地址,而是虚构了一个地址,这使我再次陷入迷茫!但后来在使用arp -a命令时发现总有一个IP地址会出现(此IP既不是我电脑的,也不是网关的),我由此怀疑这个IP地址就是一切故障的始作蛹者,于是我坚决地在集线器上找到了这个IP对应的网线并将之拨掉,果然在没有这台病毒主机干扰后,网络终于恢复了正常。至此由该arp病毒引发的上网时断时续问题随着这台病毒主机被抓出而划上了完美的句号。

ARP病毒---导致网络(ping)时断时通---解决办法

【解决思路】

1、不要把你的网络安全信任关系建立在IP基础上或MAC基础上,(rarp同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。

2、设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。

3、除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。

4、使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。

5、使用“proxy”代理IP的传输。

6、使用硬件屏蔽主机。设置好你的路由,确保IP地址能到达合法的路径。(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。

7、管理员定期用响应的IP包中获得一个rarp请求,然后检查ARP响应的真实性。

8、管理员定期轮询,检查主机上的ARP缓存。

9、使用防火墙连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。

【HiPER用户的解决方案】

建议用户采用双向绑定的方法解决并且防止ARP欺骗。

1、在PC上绑定路由器的IP和MAC地址:

1)首先,获得路由器的内网的MAC地址(例如HiPER网关地址192.168.16.254的MAC地址为0022aa0022aa局域网端口MAC地址>)。

2)编写一个批处理文件rarp.bat内容如下:

@echo off

arp -d

arp -s 192.168.16.254 00-22-aa-00-22-aa

将文件中的网关IP地址和MAC地址更改为您自己的网关IP地址和MAC地址即可。

将这个批处理软件拖到“windows--开始--程序--启动”中。

rp

显示和修改“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则 arp 命令将显示帮助信息。

语法

arp[-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]] [-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]]

参数

-a[ InetAddr] [ -N IfaceAddr]

显示所有接口的当前 ARP 缓存表。要显示特定 IP 地址的 ARP 缓存项,请使用带有 InetAddr 参数的 arp -a,此处的 InetAddr 代表 IP 地址。如果未指定 InetAddr,则使用第一个适用的接口。要显示特定接口的 ARP 缓存表,请将 -N IfaceAddr 参数与 -a 参数一起使用,此处的 IfaceAddr 代表指派给该接口的 IP 地址。-N 参数区分大小写。

-g[ InetAddr] [ -N IfaceAddr]

与 -a 相同。

-d InetAddr [IfaceAddr]

删除指定的 IP 地址项,此处的 InetAddr 代表 IP 地址。对于指定的接口,要删除表中的某项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。要删除所有项,请使用星号 (*) 通配符代替 InetAddr。

-s InetAddr EtherAddr [IfaceAddr]

向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。

/?

在命令提示符下显示帮助。

注释

? InetAddr 和 IfaceAddr 的 IP 地址用带圆点的十进制记数法表示。

? EtherAddr 的物理地址由六个字节组成,这些字节用十六进制记数法表示并且用连字符隔开(比如,00-AA-00-4F-2A-9C)。

按以下顺序删除病毒组件

1) 删除 ”病毒组件释放者”

%windows%\SYSTEM32\LOADHW.EXE

2) 删除 ”发ARP欺骗包的驱动程序” (兼 “病毒守护程序”)

%windows%\System32\drivers\npf.sys

a. 在设备管理器中, 单击”查看”-->”显示隐藏的设备”

b. 在设备树结构中,打开”非即插即用….”

c. 找到” NetGroup Packet Filter Driver” ,若没找到,请先刷新设备列表

d. 右键点击” NetGroup Packet Filter Driver” 菜单,并选择”卸载”.

e. 重启windows系统,

f. 删除%windows%\System32\drivers\npf.sys

3) 删除 ”命令驱动程序发ARP欺骗包的控制者”

%windows%\System32\msitinit.dll

2. 删除以下”病毒的假驱动程序”的注册表服务项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Npf

三、定位ARP攻击源头和防御方法

1.定位ARP攻击源头

主动定位方式:因为所有的ARP攻击源都会有其特征——网卡会处于混杂模式,可以通过ARPKiller这样的工具扫描网内有哪台机器的网卡是处于混杂模式的,从而判断这台机器有可能就是“元凶”。定位好机器后,再做病毒信息收集,提交给趋势科技做分析处理。

标注:网卡可以置于一种模式叫混杂模式(promiscuous),在这种模式下工作的网卡能够收到一切通过它的数据,而不管实际上数据的目的地址是不是它。这实际就是Sniffer工作的基本原理:让网卡接收一切它所能接收的数据。

被动定位方式:在局域网发生ARP攻击时,查看交换机的动态ARP表中的内容,确定攻击源的MAC地址;也可以在局域居于网中部署Sniffer工具,定位ARP攻击源的MAC。

也可以直接Ping网关IP,完成Ping后,用ARP –a查看网关IP对应的MAC地址,此MAC地址应该为欺骗的MAC。

使用NBTSCAN可以取到PC的真实IP地址、机器名和MAC地址,如果有”ARP攻击”在做怪,可以找到装有ARP攻击的PC的IP、机器名和MAC地址。

命令:“nbtscan -r 192.168.16.0/24”(搜索整个192.168.16.0/24网段, 即192.168.16.1-192.168.16.254);或“nbtscan 192.168.16.25-137”搜索192.168.16.25-137 网段,即192.168.16.25-192.168.16.137。输出结果第一列是IP地址,最后一列是MAC地址。

NBTSCAN的使用范例:

假设查找一台MAC地址为“000d870d585f”的病毒主机。

1)将压缩包中的nbtscan.exe 和cygwin1.dll解压缩放到c:下。

2)在Windows开始—运行—打开,输入cmd(windows98输入“command”),在出现的DOS窗口中输入:C: btscan -r 192.168.16.1/24(这里需要根据用户实际网段输入),回车。

3)通过查询IP--MAC对应表,查出“000d870d585f”的病毒主机的IP地址为“192.168.16.223”。

通过上述方法,我们就能够快速的找到病毒源,确认其MAC——〉机器名和IP地址。

2.防御方法

a.使用可防御ARP攻击的三层交换机,绑定端口-MAC-IP,限制ARP流量,及时发现并自动阻断ARP攻击端口,合理划分VLAN,彻底阻止盗用IP、MAC地址,杜绝ARP的攻击。

b.对于经常爆发病毒的网络,进行Internet访问控制,限制用户对网络的访问。此类ARP攻击程序一般都是从Internet下载到用户终端,如果能够加强用户上网的访问控制,就能极大的减少该问题的发生。

c.在发生ARP攻击时,及时找到病毒攻击源头,并收集病毒信息,可以使用趋势科技的SIC2.0,同时收集可疑的病毒样本文件,一起提交到趋势科技的TrendLabs进行分析,TrendLabs将以最快的速度提供病毒码文件,从而可以进行ARP病毒的防御。

该病毒发作时候的特征为,中毒的机器会伪造某台电脑的MAC地址,如该伪造地址为网关服务器的地址,那么对整个网吧均会造成影响,用户表现为上网经常瞬断。

一、在任意客户机上进入命令提示符(或MS-DOS方式),用arp –a命令查看:

C:\WINNT\system32>arp -a

Interface: 192.168.0.193 on Interface 0x1000003

Internet Address Physical Address Type

192.168.0.1 00-50-da-8a-62-2c dynamic

192.168.0.23 00-11-2f-43-81-8b dynamic

192.168.0.24 00-50-da-8a-62-2c dynamic

192.168.0.25 00-05-5d-ff-a8-87 dynamic

192.168.0.200 00-50-ba-fa-59-fe dynamic

可以看到有两个机器的MAC地址相同,那么实际检查结果为

00-50-da-8a-62-2c为192.168.0.24的MAC地址,192.168.0.1的实际MAC地址为00-02-ba-0b-04-32,我们可以判定192.168.0.24实际上为有病毒的机器,它伪造了192.168.0.1的MAC地址。

二、在192.168.0.24上进入命令提示符(或MS-DOS方式),用arp –a命令查看:

C:\WINNT\system32>arp -a

Interface: 192.168.0.24 on Interface 0x1000003

Internet Address Physical Address Type

192.168.0.1 00-02-ba-0b-04-32 dynamic

192.168.0.23 00-11-2f-43-81-8b dynamic

192.168.0.25 00-05-5d-ff-a8-87 dynamic

192.168.0.193 00-11-2f-b2-9d-17 dynamic

192.168.0.200 00-50-ba-fa-59-fe dynamic

可以看到带病毒的机器上显示的MAC地址是正确的,而且该机运行速度缓慢,应该为所有流量在二层通过该机进行转发而导致,该机重启后网吧内所有电脑都不能上网,只有等arp刷新MAC地址后才正常,一般在2、3分钟左右。

三、如果主机可以进入dos窗口,用arp –a命令可以看到类似下面的现象:

C:\WINNT\system32>arp -a

Interface: 192.168.0.1 on Interface 0x1000004

Internet Address Physical Address Type

192.168.0.23 00-50-da-8a-62-2c dynamic

192.168.0.24 00-50-da-8a-62-2c dynamic

192.168.0.25 00-50-da-8a-62-2c dynamic

192.168.0.193 00-50-da-8a-62-2c dynamic

192.168.0.200 00-50-da-8a-62-2c dynamic

该病毒不发作的时候,在代理服务器上看到的地址情况如下:

C:\WINNT\system32>arp -a

Interface: 192.168.0.1 on Interface 0x1000004

Internet Address Physical Address Type

192.168.0.23 00-11-2f-43-81-8b dynamic

192.168.0.24 00-50-da-8a-62-2c dynamic

192.168.0.25 00-05-5d-ff-a8-87 dynamic

192.168.0.193 00-11-2f-b2-9d-17 dynamic

192.168.0.200 00-50-ba-fa-59-fe dynamic

病毒发作的时候,可以看到所有的ip地址的mac地址被修改为00-50-da-8a-62-2c,正常的时候可以看到MAC地址均不会相同。

解决办法:

一、采用客户机及网关服务器上进行静态ARP绑定的办法来解决。

1. 在所有的客户端机器上做网关服务器的ARP静态绑定。

首先在网关服务器(代理主机)的电脑上查看本机MAC地址

C:\WINNT\system32>ipconfig /all

Ethernet adapter 本地连接 2:

Connection-specific DNS Suffix . :

Description . . . . . . . . . . . : Intel? PRO/100B PCI

Adapter (TX)

Physical Address. . . . . . . . . : 00-02-ba-0b-04-32

Dhcp Enabled. . . . . . . . . . . : No

IP Address. . . . . . . . . . . . : 192.168.0.1

Subnet Mask . . . . . . . . . . . : 255.255.255.0

然后在客户机器的DOS命令下做ARP的静态绑定

C:\WINNT\system32>arp –s 192.168.0.1 00-02-ba-0b-04-32

注:如有条件,建议在客户机上做所有其他客户机的IP和MAC地址绑定。

2. 在网关服务器(代理主机)的电脑上做客户机器的ARP静态绑定

首先在所有的客户端机器上查看IP和MAC地址,命令如上。

然后在代理主机上做所有客户端服务器的ARP静态绑定。如:

C:\winnt\system32>arp –s 192.168.0.23 00-11-2f-43-81-8b

C:\winnt\system32>arp –s 192.168.0.24 00-50-da-8a-62-2c

C:\winnt\system32>arp –s 192.168.0.25 00-05-5d-ff-a8-87

。。。。。。。。。

3. 以上ARP的静态绑定最后做成一个windows自启动文件,让电脑一启动就执行以上操作,保证配置不丢失。

二、有条件的网吧可以在交换机内进行IP地址与MAC地址绑定

三、IP和MAC进行绑定后,更换网卡需要重新绑定,因此建议在客户机安装杀毒软件来解决此类问题:该网吧发现的病毒是变速齿轮2.04B中带的,病毒程序在

http://www.wgwang.com/list/3007.html 可下载到:

1、 KAV(卡巴斯基),可杀除该病毒,病毒命名为:TrojanDropper.Win32.Juntador.c

杀毒信息:07.02.2005 10:48:00 C:\Documents and

Settings\Administrator\Local Settings\Temporary Internet

Files\Content.IE5\B005Z0K9\Gear_Setup[1].exe infected

TrojanDropper.Win32.Juntador.c

2、 瑞星可杀除该病毒,病毒命名为:TrojanDropper.Win32.Juntador.f

逻辑地址(网上copy):

什么叫“逻辑”?,简单的说逻辑就是人们为了方便记忆,把一些本来没规律的东西人为的划分成有规律的组合,比如:“香蕉、32、菠萝、跳高、跑步、boy”能满足“是汉字”这个条件的,按逻辑来分就有“香蕉、菠萝、跳高、跑步”;能满足“能吃的”这个条件,逻辑来分就有“香蕉、菠萝”,而逻辑地址说的简单点就是为了建立某种连接或运算来,以满足某种条件为前提,来区分一些数据的类型,比如你的计算机内存地址里有很多数据,所有能满足“大于2561并且小于3651并且是奇数”的数据被命名为“XSD”,这个被命名为“XSD”的地址就是逻辑地址。

物理地址(我自己的理解):

物理地址是一个很宽泛的概念,磁盘,内存等存储设备都有物理地址的说法.物理内存地址指的是硬件实现上物理内存展现给外部总线访问的编码地址,其范围等于物理内存的大小

它由20位二进制数构成。物理地址是CPU访问内存时使用的地址。

例如在内存中,数据存储在堆区和栈区(栈区和堆区,是两个内存模型.栈区的内存在系统用完之后,自动释放堆区的内存在必须程序员自已去释放,否则,会有内存泄露的问题!!)。

举个例子,在C语言中,定义一个变量:

main()

{...

int

a=10

...

}

那么编译器就会为a在栈区分配2个长度为8个字节的存储空间,假设其物理地址为0x00022-0x00023(地址用16进制表示,长度为20个2进制,每一个16进制位表示四个2进制位),所分配的起始地址可以直接打印出来:

main()

{...

printf("address

of

a

is",&a)

...

}

&在C语言中就是取地址符,&a就是取a的地址。这是栈区,还有个堆区,如下:

我们再定义一个指针型变量,为他分配动态存储空间:

main()

{...

int

*a

/*指针型变量,这里不能赋初始值,因为是指针型变量,这里不多讨论.*/

a=(int

*)malloc(sizeof(int));

/*为a开辟一个动态存储空间,两句可以合为一句,我习惯性不合*/

...

}

编译器在遇到a=(int

*)malloc(sizeof(int));这条指令时候就会在堆区开辟存储空间.切记,用完后必须释放分配的动态空间,要不然就永远也找不回那段分配的空间,造成空间浪费,我的老师说的,我想也是这样的.

补充一点:在C语言中,把变量分配到指定的内存地址中,也是可以的,例如一个字符型指针a,

main()

{...

volatile

unsigned

char

*a=(volatile

unsigned

char*)0x000AF

...

}

注意,以上在分配空间时,都没有考虑到内存溢出的情况.现在内存这么大了,不会再溢出了吧,除非你变态.

磁盘上的物理地址道理不用说了.

在网络上也有物理地址,就是MAC,在网络上IP和MAC是一一对应的,路由表就是存储IP和MAC的的对应关系.ARP攻击的原理就是伪造MAC地址.不做过多讨论,要不然我不知道要写到什么时候.

在实地址方式下,如何求存储器的物理地址?

有个公式,物理地址=段基址×16+偏移地址

按照物理地址的计算公式,计算首字单元的物理地址,

首字单元的物理地址=30C0H*16+00F6H=30C00H+00F6H=3C3F6H

末字单元的物理地址=首字单元的物理地址+20H-2

注意16个字为32个字节,占用32个(即20H个)存储单元.

末字单元的物理地址=3C3F6H+20H-2=3C414H.

回答完毕.原创内容转再请著名出处--我的baidu

blog.