免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2164 | 回复: 6
打印 上一主题 下一主题

[网络管理] 发送ripv2的查询路由表消息,为什么收不到应答呢, 代码贴在下面了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-10 11:31 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
void   MTimeOuts(int   msec)     
{     
            struct   timeval   timeout;     
               
        memset(&timeout,   0,   sizeof(struct   timeval));     
                if(msec   >=   1000)     
                      {   
                            timeout.tv_sec   =   msec/1000;     
                              timeout.tv_usec   =   0;   
                                }   
                  else     
                        {   
                              timeout.tv_sec =   0;     
                                timeout.tv_usec =   msec;   
                                  }   
                     
                    select(0,   NULL,   NULL,   NULL,   &timeout);     
}  




typedef enum{
    STATIC,
    DHCP,
    PPPoE
} WAY;


int main(int argc, char *argv[])
{
int sock;

WAY way = DHCP;
way = 1;
extern int errno;
struct sockaddr_in toAddr;
sock = socket(AF_INET,SOCK_DGRAM,0);
if(sock < 0)
{
exit(1);
}
struct sockaddr_in bAddr;
struct sockaddr_in cli;
memset(&bAddr, 0, sizeof(bAddr));
bAddr.sin_family =  AF_INET;
bAddr.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr("192.168.0.55");
bAddr.sin_port = htons(520);
int ret  = bind(sock, (struct sockaddr *)&bAddr, sizeof(bAddr));
if(ret != 0)
{
   
    char * mesg = strerror(errno);
      printf("Mesg:%s\n",mesg);  
}
struct ip_mreq mreq;
if (inet_aton("224.0.0.9", &mreq.imr_multiaddr) < 0)
{
    perror("inet_aton");
    return -1;
}
mreq.imr_interface.s_addr = htonl(INADDR_ANY);

ret = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
if(ret != 0)
{
    printf("setsock error code=%d\n", errno);
    char * mesg = strerror(errno);
      printf("Mesg:%s\n",mesg);  
      
    return -1;
}
char buff[128];
memset(buff, 0x00, sizeof(buff));
memset(&toAddr,0,sizeof(toAddr));

toAddr.sin_family=AF_INET;
toAddr.sin_addr.s_addr=(inet_addr("224.0.0.9"));
//toAddr.sin_addr.s_addr=(inet_addr("210.82.95.233"));
toAddr.sin_port = htons(520);
buff[0] = 0x01;
buff[1]= 0x02;
//buff[4]= 0xff;
//buff[5]= 0xff;

//buff[7]= 0x02;
//strcpy(buff+8, "password");
//buff[25]= 0x02;

//buff[27]= 0xaa;

//buff[28]= 192;
//buff[29]= 168;
//buff[30]= 0;
//buff[31]= 55;


//buff[32]= 255;
//buff[33]= 255;
//buff[34]= 255;
//buff[35]= 0;


buff[23] = 0x10;
time_t now = time(NULL);
time_t last =time(NULL);
int count = 0;
char buf[128];
int r = 0;
if(1)
{
    ret = 24;
    if(sendto(sock,buff, 24,0,(struct sockaddr*)&toAddr,sizeof(toAddr)) != ret)
    {
        printf("Sending incomplete...\n");
   
    }
    int i = 0;
    count = 0;
    if ((r = recvfrom(sock, buf, 128, 0, (struct sockaddr *)&cli, &count)) < 0)
    {
        printf("recv no data");
    }else
    {
        for(i= 0; i< r; i++)
        {
             printf("%02x ", (unsigned char)buf);
        }
        printf("\ngreat\n");
    }
    //sleep(1);
    //count++;
    //usleep(600);
    MTimeOuts(1000);
}
    close(sock);
    return 1;
}

论坛徽章:
0
2 [报告]
发表于 2009-04-10 13:15 |只看该作者

回复 #1 pxgxue 的帖子

strace一下运行过程

论坛徽章:
0
3 [报告]
发表于 2009-04-10 13:35 |只看该作者
strace, 是什么意思, 我tcpdump ,发现数据包确实是发出去了。 在局域网内的别的机器上也可以抓到request的包。

论坛徽章:
0
4 [报告]
发表于 2009-04-10 13:38 |只看该作者

回复 #1 pxgxue 的帖子

我还有一点不明白的是, 我发送vipv2的请求包出去, 运行在公网上的路路由器,都给我一个回答。(支持ripv2)的。  我理解的有问题吗?

论坛徽章:
0
5 [报告]
发表于 2009-04-10 16:53 |只看该作者
帮LZ顶下,我最近也在看RIP,老大要我改一个bug,头痛啊。我还从来没有抓到过request包,抓到得都是response包。更新是30秒,你看看其他机器路由表改变了么?

论坛徽章:
0
6 [报告]
发表于 2009-04-10 17:01 |只看该作者
还有一种可能就是你的机器防火墙或者网关把RIP包给DROP掉了,这种情况我碰到过,呵呵,两个路由器,一个用做网关,结果网关那个路由器就是收不到另外一个路由器的RIP包,LZ试试吧,好运

论坛徽章:
0
7 [报告]
发表于 2009-04-13 09:38 |只看该作者

我的msn: pengxuegang@hotmail.com

有谁感兴趣的话,可以加我。咱们一块讨论一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP