注:: 
   不能用Netbios和发送ARP包,这两种方法在从注册表修改后,读取的是注册表的内容?

解决方案 »

  1.   

    是的,iphlpapi和winpcap,还有Netbios()都是从注册表中读取的
      

  2.   

    嘿嘿,这个难度有点大,上次我做的时候就是用iphlpapi来做的
      

  3.   

    WinExec("winipcfg /all /batch c:\\mac.txt",SW_HIDE);
    然后从mac.txt中解析出MAC地址。
      

  4.   

    谢了,不过 ipconfig 这种方法还是从注册表中得到的
      

  5.   

    有个问题
    iphlpapi可以从一块网卡读到好几个IP地址,
    就象我这个,可以得到
    127.0.0.1  //回读地址
    192.168.0.5  //自设定的地址
    202.197.45.44 //拨号上网分配的IP我怎么在编程的时候把 自设定的地址 单独提出来 
    是不是他肯定在第二位?得到的这些数据是怎么一个关系 
    哪位大虾给讲讲  多谢
      

  6.   

    要MAC地址,怎么回答IP地址?
      

  7.   

    可以通过直接读写端口的方式来得到网卡93c46芯片的内容,然后就可以知道mac地址了啊! 不过具体我也不知道!
      

  8.   

    读取网卡的物理地址的子程序:
    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个字节)里。
      

  9.   

    hanrong(han)和prettywolf(多情自古空余,此恨绵绵无绝期)他们说的对,要想直接取得写驱动程序,这个比较难,,你会写了驱动程序,你还得知道网卡的地址,然后用prettywolf(多情自古空余,此恨绵绵无绝期) 的程序去读,当然你可以看看相应网卡主控芯片的资料,比如说rtl8139,rtl8029....然后自己写,
    有一个单片机的网站,http://www.laogu.com/上面有以太网开发版,这个网站上有网卡芯片的资料,和部分程序,,,你可以看看,,,不过是C51,,其实没什么和会C的话,,C51也差不多.