?? rip.c
字號:
/****************************************************************************
** File: rip.c
**
** Author: Mike Borella
**
** Comments: Dump RIP header information.
**
*****************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include "config.h"
#include "rip.h"
extern u_char *packet_end;
/*----------------------------------------------------------------------------
**
** dump_rip()
**
** Parse RIP packet and dump fields
**
**----------------------------------------------------------------------------
*/
void dump_rip(u_char *bp, int length)
{
u_char *ep = bp + length;
u_char *p;
RipHdr *rip;
RipRouteHdr *rip_route;
RipAuthHdr *rip_auth;
int route_cnt;
/*
* Make sure we don't run off the end of the packet
*/
if (ep > packet_end)
ep = packet_end;
p = bp;
printf("-----------------------------------------------------------------\n");
printf(" RIP Header\n");
printf("-----------------------------------------------------------------\n");
rip = (RipHdr *) p;
printf("Command: %d ", (int) rip->command);
switch(rip->command)
{
case RIP_CMD_RQ:
printf("(request)\n");
break;
case RIP_CMD_RP:
printf("(reply)\n");
break;
case RIP_CMD_POLL:
printf("(poll)\n");
break;
case RIP_CMD_POLL_ENTRY:
printf("(poll entry)\n");
break;
default:
printf("(unknown)\n");
}
printf("Version: %d\n", (int) rip->version);
printf("Routing domain: %d\n", (int) rip->domain);
p = p + sizeof(RipHdr);
/*
* Do the individual routes
*/
route_cnt = 0;
while (p < ep)
{
route_cnt++;
printf("Route: %d\n", route_cnt);
rip_route = (RipRouteHdr *) p;
if (rip_route->addr_fam == 0xffff)
{
rip_auth = (RipAuthHdr *) p;
p = p + sizeof(RipAuthHdr);
}
else
{
printf(" Address family: %d\n",
(int) ntohs(rip_route->addr_fam));
printf(" Route tag: %d\n",
(int) ntohs(rip_route->route_tag));
/* rip_route->ipaddr.s_addr = ntohl(rip_route->ipaddr.s_addr); */
printf(" IP address %s\n",
inet_ntoa(rip_route->ipaddr));
/* rip_route->netmask.s_addr = ntohl(rip_route->netmask.s_addr); */
printf(" Netmask: %s\n",
inet_ntoa(rip_route->netmask));
/* rip_route->next_hop.s_addr = ntohl(rip_route->next_hop.s_addr); */
printf(" Next hop: %s\n",
inet_ntoa(rip_route->next_hop));
printf(" Metric: %d\n",
(int) ntohl(rip_route->metric));
p = p + sizeof(RipRouteHdr);
}
} /* while */
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -