资源简介
在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
相关资源
- BitBake User Manual .pdf
-
Openem
bedded User Manual .pdf - 计算机网络工程实习日记
- 计算机网络(第四版)特南鲍姆_潘爱
- 电量检测芯片max17055linux驱动
- 计算机网络课程设计实验报告
- stm32在ubuntu linux下开发测试源文件
- 计算机网络安全技术发展与防火墙技
- 操作系统原理课程设计报告
- linux 下weblogic部署web项目
- 计算机网络第八章课后答案
- qt libusb U盘通信
- linux mdio 读写phy 寄存器工具
- 简单ping程序的实现
- OV5648摄像头linux驱动代码
- Linux C聊天室源码
- windows系统运行的scp,实现从Linux系统
- linux下实现即时通讯的毕业论文
- linux 嵌入式实习报告
- linux 串口数据接收 发送
- 北大MOOC课后题-计算机网络-严伟
- CUDA 9.1+cuDNN v7 for Ubuntu 16.04
- Linux 下实现的聊天系统,TCP实现
- linux0.12源码+linux源码剖析0.12PDF+linux源
- Linux增加字符设备驱动实验
- 计算机网络课程设计_基于思科的简单
- linux tcp udp 调试工具
- linux 下c实现简单的网络嗅探器
- rm.bat 在win下模拟linux rm命令的bat文件
- Linux下串口读写例程
评论
共有 条评论