首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问ip协议

2012-04-06 
请教ip协议我想分析ip协议我把网卡设置成混杂模式后收到了数据,但是打出来后源ip地址不对,代码如下C/C++ c

请教ip协议
我想分析ip协议
我把网卡设置成混杂模式后收到了数据,但是打出来后源ip地址不对,代码如下

C/C++ code
int promisc(){    int sp;    int i;    char *ethname="eth0";    char *p;    char buff[2048];    struct ifreq ifr;    int n = 0XFF;            sp=socket(AF_INET,SOCK_PACKET,htons(0x0003));    if(sp<0)    {        printf("create socket error\n");        return 1;    }            strcpy(ifr.ifr_name, ethname);    i=ioctl(sp,SIOCGIFFLAGS, &ifr);    if(i<0)     {        printf("ioctl SIOCGIFFLAGS error\n");        return 1;    }    ifr.ifr_flags|=IFF_PROMISC;    i=ioctl(sp,SIOCSIFFLAGS, &ifr);    if(i<0)    {        printf("ioctl SIOCSIFFLAGS error\n");        return 1;    }            while(1)    {        recvfrom(sp, buff, sizeof(buff), 0, NULL, NULL);        p=buff;                printf("MAC: %.2X:%02X:%02X:%02X:%02X:%02X==>"        "%.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n",        p[6]&n, p[7]&n, p[8]&n, p[9]&n, p[10]&n, p[11]&n,        p[0]&n, p[1]&n, p[2]&n,p[3]&n, p[4]&n, p[5]&n);                printf("TYPE: %02X%02X\n", p[12]&n, p[13]&n);        printf("Version:%1x\n",p[14]&0xf0);        printf("headlen:%1x\n",p[14]&0x0f);        printf("TOS:%x\n",p[15]);        printf("len:%02x%02x\n",p[16]&n,p[17]&n);                printf("16bit:\n");        printf("3bit:\n");        printf("13bit:\n");                printf("TTL:%02x\n",p[22]);        printf("Protocal:%02x\n",p[23]);        printf("%02x%02x\n",p[24],p[25]);        printf("%02x.%02x.%02x.%02x\n",p[26],p[27],p[28],p[29]);    }            return 0;}


[解决办法]
printf("%02x.%02x.%02x.%02x\n",0x0ff & p[26],0x0ff & p[27],0x0ff & p[28],0x0ff & p[29]);

[解决办法]
这题和IP没有关系
%x是unsigned int,你的是char(有正负)。如果是char的最高位是1,比如F1,补位后就是0xFFFFFFF1。所以要&下。
或者用unsigned char p[]

热点排行