不就是mac吗
我当啥难题,这么猖狂

解决方案 »

  1.   

    to:qiandeng 你知道,你告诉我,不要告诉我用VC!!!
      

  2.   

    呵呵,用NetBIOS就可以搞定。
    如果在Win2K里就更简单了,一个函数SendARP()就可以搞定。
      

  3.   

    还有,数据包里只有32位IP地址,没有48位的Mac地址
      

  4.   

    to:gonki:你了解底层的东西吗?去看看有关实体层的协议!!!
    to:yezq_ln:关键是IP协议以经把这个地址给丢了!
      

  5.   

    呵呵
    那我就说点
    现在的网卡都有自动拆包的功能,你等网卡自动拆包后,你已经得不到MAC地址
    所有你首先要控制网卡别自动拆包,你来拆,不过写程序是很烦的
    一般的网卡都有自己的缓存,所以你要直接去读网卡的缓存,得到包,然后解析出mac
      

  6.   

    to qiandeng:我知道通过VC的vxd编程,能够实现。可是delphi怎么实现?
      

  7.   

    送你一个函数:
    function GetMacADDR(IPstr:string):string;
    label Fend;
    var
      DestIP:IPAddr;
      pMacAddr: PULong;
      AddrLen: ULong;
      MacAddr: array[0..5] of byte;
      p: PByte;
      s: string;
      i: integer;
      SendARP:PSendARP;
      HM:Thandle;
    begin
      Result:='';
      hm := loadlibrary('iphlpapi.dll');
      if hm = 0 then goto Fend;
      SendARP := getprocaddress(hm, 'SendARP');
      if @SendARP=nil then goto Fend ;
      DestIP := inet_addr(PChar(IPstr));
      pMacAddr := @MacAddr[0];
      AddrLen := SizeOf(MacAddr);
      SendARP(DestIP, 0, pMacAddr, AddrLen);
      p := PByte(pMacAddr);
      if Assigned(p) and (AddrLen>0) then
        for i := 0 to AddrLen-1 do
        begin
          s := s + IntToHex(p^,2) + '-';
          Inc(p);
        end;
      SetLength(s, length(s)-1);
      Result:=s;
    Fend:
      FreeLibrary(hm);
    end;
    别忘了给分哟!
      

  8.   

    哦,你用了arp协议!我的要求是根据IP包直接得到mac地址。这样发ARP数据包去得到mac地址,我也会!!不过我还是要谢谢你!!分是少不了的!!
      

  9.   

    to netdigger_2000:
    我当然知道数据包中有Mac地址,要不网卡怎么知道该收哪个包,但那是在链路层(帧)上。
    在Winsock中,最多只提供到网络层(IP)的访问,所以只有IP地址。
    如果要访问链路层,恐怕只能用VXD,WDM了。这点在Linux里实现就很简单。
      

  10.   

    难道用delphi没有办法实现了吗?
      

  11.   

    到VCL。VCLXX。ORG去找,我见过
      

  12.   

    to:netknight
    哪儿有真正的高手?
      

  13.   


      如果是,局域网的话可以通过,ip -> mac 解析我以前,做过这样的 一个程序源程序要找一下了 !
      

  14.   

    airhorse(编程至尊宝)
    谢谢,可以给我找一找吗
    或者给一下思路
      

  15.   

    newdreamer(人生一场醉):你这个也是一种思路,不过既然数据包里已经有了物理地址,为什么还要加一个物理地址,那不是浪费吗,再说,这样也不是我提这个问题的答案啊,只能说是一种变通的办法