- 2
- 0
- 约9.49千字
- 约 13页
- 2023-09-13 发布于湖北
- 举报
路由器实验报告
简介
采用静态路由表
采用静态mac表
实现双网卡转发
采用两个程序分别在两个网卡上抓包和转发
流程图
实现步骤
①打开所有设备
②分别选择两块网卡
③在一块网卡上抓包同时过滤
④查找路由表
若不在路由表中则重新抓包
⑤修改目的mac并转发
⑥总结
上面的是一个程序,另外一个程序于此相同,只不过上面的是在无线网卡上抓包有线网卡上发,另一个是在有线网卡上抓,无线网卡上发
采用两个程序,分别在两块网卡上抓包和转发,两个程序同时运行,能够实现路由器的功能
出现过的问题
期末压力较大,没有时间做更细致的,路由表和mac表都采用的静态的,程序运行前设置好
一开始使用单线程,单线程总是抓不到回复的包,后来改用两个程序。
不会使用多线程,学习多线程时间上又不允许,只能开两个程序,达到模拟多线程的目的
// router.cpp : 定义控制台应用程序的入口点。
//
#include stdafx.h
#includepcap.h
#includeiostream
#includeWinsock2.h
#includeWindows.h
#includestring
#includequeue
using namespace std;
#pragma comment(lib,ws2_32.lib)
#pragma pack(1)
typedef struct FrameHeader_t//定义帧首部
{
//帧字节
BYTE DesMAC[6]; //目的地址
BYTE SrcMAC[6]; //源地址
WORD FrameType; //帧类型
}FrameHeader_t;
typedef struct ARPFrame_t//ARP帧
{
FrameHeader_t FrameHeader;
WORD HardwareType;
WORD ProtocolType;
BYTE HLen;
BYTE PLen;
WORD Operation;
BYTE SendHa[6];
DWORD SendIP;
BYTE RecvHa[6];
DWORD RecvIP;
}ARPFrame_t;
typedef struct IPHEADER_T
{
//IP首部
BYTE Ver_HLen;//版本和报头长度,高4位为版本,低四位为报头长度
BYTE TOS;//服务类型
WORD TotalLen;//总长度
WORD ID;//表示
WORD Flag_segment;//标志+片偏移
BYTE TTL;//生存周期
BYTE Protocol;//协议
WORD Checksum;//校验和
ULONG SrcIP;//源IP
ULONG DstIP;//目的IP
}IPHeader_t;
typedef struct Data_t
{
//包含帧首部和IP首部的数据包
FrameHeader_t FrameHeader;
IPHeader_t IPHeader;
}Data_t;
#pragma pack()
struct routersheet
{
unsigned int netmask;
unsigned int dstnet;
unsigned int nextnet;
};
struct macsheet
{
unsigned int ip;
BYTE mac[6];
unsigned int ttl;
};
const int Number=3;
routersheet router_sheet[Number]={
//子网掩码 目的网络 下一跳步
{inet_addr(255.255.255.0),inet_addr(192.168.137.0),inet_addr(112.112.112.113)},
{inet_addr(255.255.255.0),inet_addr(192.168.191.0),inet_addr(255.255.255.255)},
{inet_addr(255.255.255.0),inet_addr(112.112.112.0),inet_addr(255.255.255.255)}
};
macsheet mac_sheet[2]={
{inet_addr(112.112.112.113),{0x8c,0x89,0xa5,0x73,0x4d,0xc0},10000},
{inet_addr(192.168.191.128),{0x34,0x08,0x04,0xe0,0x2c,0xc6},10000}
};
const BYTE w_mac[6]={0xac,0x72,0x
原创力文档

文档评论(0)