• 大小: 64KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 静态路由  linux  

资源简介

在linux环境下模拟了基本的静态路由,网络搭建在几台虚拟机之间。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MAX_ROUTE_INFO 8;
#define MAX_ARP_SIZE 8;
#define MAX_DEVICE 4;
#define BUFFER_MAX 2048

typedef struct route_item{
unsigned int destination;
unsigned int gateway;
unsigned int netmask;
unsigned char interface[14];
};
struct route_item route_info[8];
int route_item_index;

typedef struct arp_table_item{
unsigned int ip_addr;
unsigned char mac_addr[6];
};
struct arp_table_item arp_table[8];
int arp_item_index;

typedef struct device_item{
unsigned char interface[14];
unsigned char mac_addr[6];
unsigned int ip_addr;
};
struct device_item device[4];
int device_index;


/*初始化函数,首先是把你的静态路由信息添加到你的route_info[]这个数组中
  我在自己机器上时如下添加的,具体情况根据你的网络拓扑情况添加
  参照linux自带的路由结构,destination表示的是目的网络号,gateway表示要经过
  的网关,如果为零说明已经到达最后一个路由节点,下一条就是目的地,netmask:
  用来提取目的网络号:实际操作时把netmask 和 ip报文内的目的地址进行按位与操   
  作,然后把结果同当前的目的网络号对比
  下面说一下device[]这个数组,它用来存放路由的网卡信息的,比如说你在终端中输
  入ifconfig后,会出现一些网卡的信息,比如说eth0,在里面找到MAC和IP,填入我
  的device[]数组中
*/

void initial()
{
route_item_index = 3;
route_info[0].destination = inet_addr(“192.168.2.0“);
route_info[0].gateway = inet_addr(“192.168.1.2“);
route_info[0].netmask = inet_addr(“255.255.255.0“);
strcpy(route_info[0].interface “eth0“);

route_info[1].destination = inet_addr(“192.168.1.0“);
route_info[1].gateway = 0;
route_info[1].netmask = inet_addr(“255.255.255.0“);
strcpy(route_info[1].interface “eth0“);

route_info[2].destination = inet_addr(“192.168.0.0“);
route_info[2].gateway = 0;
route_info[2].netmask = inet_addr(“255.255.255.0“);
strcpy(route_info[2].interface “eth1“);


arp_item_index = 0;

device_index = 2;
strcpy(device[0].interface “eth0“);
device[0].mac_addr[0] = 0X00;
device[0].mac_addr[1] = 0X0C;
device[0].mac_addr[2] = 0X29;
device[0].mac_addr[3] = 0XE3;
device[0].mac_addr[4] = 0X25;
device[0].mac_addr[5] = 0X86;
device[0].ip_addr = inet_addr(“192.168.1.1“);


strcpy(device[1].interface “eth1“);
device[1].mac_addr[0] = 0X00;
device[1].mac_addr[1] = 0X0C;
device[1].mac_addr[2] = 0X29;
device[1].mac_addr[3] = 0XE3;
device[1].mac_addr[4] = 0X25;
device[1].mac_addr[5] = 0X90;
device[1].ip_addr = inet_addr(“192.168.0.1“);
};

void UpdateArpTable(unsigned char Iface[] int n unsigned int target)
{
int sockfdij;
sockfd = socket(PF_INET SOCK_PACKET htons(ETH_P_ARP));

char buffer[BUFFER_MAX];
struct sockaddr tofrom;
int fromlen=sizeof(struct sockaddr);
strcpy(to.sa_dataIface);
strcpy(from.sa_dataIface);
char datagram[BUFFER_MAX];
struct ethhdr *eth_header = datagram;
struct arphdr *arp_header = datagram + sizeof(struct ethhdr);
memset (datagram 0 BUFFER_MAX);

for(i = 0;i < 6; i++)
eth_header->h_dest[i] = 0XFF;
int flag;
for(i = 0;i < 2; i++)
if(strcmp(Iface

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .CA....      9148  2010-04-12 22:36  route.c

    .CA....     65334  2009-12-14 02:19  实验4 静态路由编程实现.docx

----------- ---------  ---------- -----  ----

                74482                    2


评论

共有 条评论