memset(&iaddr,0,sizeof(struct in_addr));                                  iaddr.s_addr = pIpHdr->daddr;                                             strcpy(DestIp,inet_ntoa(iaddr));                                          
这里可以把IP地址取出来,且能进行转换!
可我如何得到MAC地址,
如:pEthHdr->h_source;这个值我怎么也得不到的;
h_source是这样定义的 unsigned char h_source[6];
可我跟进去看了一下内存,得到的值h_source[0] 0 h_source[1] 88 h_source[2] 123
……
看到的是那些值,如何取出来!
帮忙哦!

解决方案 »

  1.   

    char szMacAddr[13] = {0};int pos = 0;for (int i = 0; i < 6; i++) {    UCHAR temp = pEthHdr->h_source[i] / 16; 
        szMacAddr[pos] =  (temp >9) ? (temp + 55) : (temp + 48);
        pos ++;    temp = pEthHdr->h_source[i] % 16; 
        szMacAddr[pos] =  (temp >9) ? (temp + 55) : (temp + 48);
        pos++;
    }
    // szMacAddr中存放的是Mac地址的字符串表达方式
      

  2.   

    to:wanglei888(阿笨猫) 
    能解释一下上面的程序吗?具体如何操作的?
      

  3.   

    能解释一下/16和%16 有什么用??????
    为何要判断  temp>9呢?还有+55和+48
      

  4.   

    这个不难啊:(
    char buf[128];
    if ( strstr(buf, "Physical Address") )
    {
        if ( sscanf(strchr(buf,':')+2, "%02x-%02x-%02x-%02x-%02x-%02x",
    &mac[0],
    &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) < 6 )
        {
    fprintf( stderr, "error in Physical Address line <%s>\n", buf );
    ret = -1;
        }