如何从EPROM直接得到本机的MAC地址??? 注:: 不能用Netbios和发送ARP包,这两种方法在从注册表修改后,读取的是注册表的内容? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是的,iphlpapi和winpcap,还有Netbios()都是从注册表中读取的 嘿嘿,这个难度有点大,上次我做的时候就是用iphlpapi来做的 WinExec("winipcfg /all /batch c:\\mac.txt",SW_HIDE);然后从mac.txt中解析出MAC地址。 谢了,不过 ipconfig 这种方法还是从注册表中得到的 有个问题iphlpapi可以从一块网卡读到好几个IP地址,就象我这个,可以得到127.0.0.1 //回读地址192.168.0.5 //自设定的地址202.197.45.44 //拨号上网分配的IP我怎么在编程的时候把 自设定的地址 单独提出来 是不是他肯定在第二位?得到的这些数据是怎么一个关系 哪位大虾给讲讲 多谢 要MAC地址,怎么回答IP地址? 可以通过直接读写端口的方式来得到网卡93c46芯片的内容,然后就可以知道mac地址了啊! 不过具体我也不知道! 读取网卡的物理地址的子程序:union u {uint word; struct{uchar high;uchar low;}bytes;}; //我定义的数据结构,为两个字节的结构 //,可以按照uint(unsigned int)来读取,也可以按照高低字节high和low来读取。 union u mynodeid[3];//存储网卡的物理地址union u protocal; //临时变量void readmynodeid() {uchar data i,temp;page(0);reg09=0;//寄存器RSAR1 dma read highaddress=0 reg08=0;//RSAR0 dma read lowaddress=0;reg0b=0; //RBCR1 read count high reg0a=12;//RBCR0 count low reg00=0x0a;//dma read and startfor (i=0;i<6;i++){ temp=reg10;//读取一个字节if (i % 2==0){protocal.bytes.high=temp;}else {protocal.bytes.low=temp;mynodeid[i/2].word=protocal.word;}temp=reg10;//读取一个重复的字节,这个字节被丢弃}}--网卡除了16k(地址0x4000-0x7FFFF)的接收发送存储RAM之外,还有别的RAM,还有一块大小为256字节的RAM,地址为0x0000-0x00FF,这部分RAM是eeprom 93C46的影像存储(不完全一样),存储的内容的一部分跟93C46存储的是一样的。 网卡在上电的时候将93C46的一部分内容读到这256字节的RAM里。存储是WORD类型,其中地址:0x0000-0x000b共12个字节是网卡的物理地址。(网卡的物理地址是6个字节的,为什么要用12字节?因为这12字节是重复存储的。例如网卡物理地址0x52544CC118CF,存储在0x0000-0x000b里是这样的:525254544C4CC1C11818CFCF我们可以看到单和双的地址存储的是一样的。0x000b后面的地址存储的是生产厂商的代码和产品标识代码,也是单双地址重复存储,这里就不说了。 这个程序又用到4个新的寄存器:RSAR1 RSAR0 RBCR1 RBCR0这4个寄存器是专门用于读取网卡上面的ram的。RSAR1 网卡上的RAM的起始地址高8位RSAR0 网卡上的RAM的起始地址低8位--程序中的reg09,reg08都设成0,所以是从网卡上的0x0000地址开始读。RBCR1 要读取的字节数的计数(高8位)RBCR0 要读取的字节数的计数(低8位)--程序中的reg0b=0,reg0a=12,所以要读取12个字节。 reg00=0x0a 的意思是进行DMA的内存读取操作。--结果将网卡地址存储在mynodeid[3](共6个字节)里。} hanrong(han)和prettywolf(多情自古空余,此恨绵绵无绝期)他们说的对,要想直接取得写驱动程序,这个比较难,,你会写了驱动程序,你还得知道网卡的地址,然后用prettywolf(多情自古空余,此恨绵绵无绝期) 的程序去读,当然你可以看看相应网卡主控芯片的资料,比如说rtl8139,rtl8029....然后自己写,有一个单片机的网站,http://www.laogu.com/上面有以太网开发版,这个网站上有网卡芯片的资料,和部分程序,,,你可以看看,,,不过是C51,,其实没什么和会C的话,,C51也差不多. jpg图像打水印的问题 MFC推箱子 vc++ MFC Edit Control GetWindowText的小问题 急!为什么将.ico文件中的图形粘贴到工具栏中后运行程序发现工具栏中的图片色彩失真??? 关于excel读取数据类型的 API钩子中怎样调用原始函数而不用先unhook 怎样读写word里的数据 一个图象处理新手! 请问在网络编程中用recv来接收数据,怎么辨别接受完成呢? 传参问题 关于串口通信问题!急! 请问写一个好的防火墙的程序要了解哪些知识??
然后从mac.txt中解析出MAC地址。
iphlpapi可以从一块网卡读到好几个IP地址,
就象我这个,可以得到
127.0.0.1 //回读地址
192.168.0.5 //自设定的地址
202.197.45.44 //拨号上网分配的IP我怎么在编程的时候把 自设定的地址 单独提出来
是不是他肯定在第二位?得到的这些数据是怎么一个关系
哪位大虾给讲讲 多谢
union u {uint word; struct{uchar high;uchar low;}bytes;}; //我定义的数据结构,为两个字节的结构 //,可以按照uint(unsigned int)来读取,也可以按照高低字节high和low来读取。 union u mynodeid[3];//存储网卡的物理地址
union u protocal; //临时变量
void readmynodeid()
{uchar data i,temp;
page(0);
reg09=0;//寄存器RSAR1 dma read highaddress=0
reg08=0;//RSAR0 dma read lowaddress=0;
reg0b=0; //RBCR1 read count high
reg0a=12;//RBCR0 count low
reg00=0x0a;//dma read and start
for (i=0;i<6;i++)
{ temp=reg10;//读取一个字节
if (i % 2==0)
{protocal.bytes.high=temp;}
else {protocal.bytes.low=temp;mynodeid[i/2].word=protocal.word;}temp=reg10;//读取一个重复的字节,这个字节被丢弃}
}--网卡除了16k(地址0x4000-0x7FFFF)的接收发送存储RAM之外,还有别的RAM,还有一块大小为256字节的RAM,地址为0x0000-0x00FF,这部分RAM是eeprom 93C46的影像存储(不完全一样),存储的内容的一部分跟93C46存储的是一样的。 网卡在上电的时候将93C46的一部分内容读到这256字节的RAM里。
存储是WORD类型,其中地址:
0x0000-0x000b共12个字节是网卡的物理地址。(网卡的物理地址是6个字节的,为什么要用12字节?因为这12字节是重复存储的。例如网卡物理地址0x52544CC118CF,存储在0x0000-0x000b里是这样的:525254544C4CC1C11818CFCF
我们可以看到单和双的地址存储的是一样的。0x000b后面的地址存储的是生产厂商的代码和产品标识代码,也是单双地址重复存储,这里就不说了。 这个程序又用到4个新的寄存器:RSAR1 RSAR0 RBCR1 RBCR0
这4个寄存器是专门用于读取网卡上面的ram的。
RSAR1 网卡上的RAM的起始地址高8位
RSAR0 网卡上的RAM的起始地址低8位
--程序中的reg09,reg08都设成0,所以是从网卡上的0x0000地址开始读。
RBCR1 要读取的字节数的计数(高8位)
RBCR0 要读取的字节数的计数(低8位)
--程序中的reg0b=0,reg0a=12,所以要读取12个字节。
reg00=0x0a 的意思是进行DMA的内存读取操作。--结果将网卡地址存储在mynodeid[3](共6个字节)里。
}
有一个单片机的网站,http://www.laogu.com/上面有以太网开发版,这个网站上有网卡芯片的资料,和部分程序,,,你可以看看,,,不过是C51,,其实没什么和会C的话,,C51也差不多.