• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签: 路由  route  

资源简介

简单的路由程序,winpcap,vs2010,c++,没写界面。 改进:利用线程&arp缓存表

资源截图

代码片段和文件信息


#include
#include
#include
#include
#include“标头.h“
#pragma comment (lib“ws2_32.lib“)

using namespace std;
#pragma pack(1)
typedef struct frameHeader_t//帧首部
{
BYTE DesMac[6];
BYTE SrcMac[6];
WORD frameType;
}frameHeader_t;

typedef struct IPHeader_t { //IP首部
BYTE Ver_HLen;   //版本与协议类型
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 IPData_t { //包含帧首部和IP首部的数据包
frameHeader_t frameHeader;
IPHeader_t IPHeader;
} IPData_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;

#pragma pack()

void print(ULONG IP);
bool ARPRequest(pcap_t *p UCHAR *srcMAC ULONG scrIP ULONG targetIP);
int main()
{
int number = 0;
bool flag = 0;//是否得到IPv4包,0为没有得到。
BYTE my_mac[6];
BYTE its_mac[6];
ULONG my_ip;

router_table * rt = new router_table[RT_TABLE_SIZE];
int rt_length = 0;//路由表的初始长度

pcap_if_t * alldevs;
pcap_if_t *d;
pcap_addr_t *a;

ULONG targetIP;

char errbuf[PCAP_ERRBUF_SIZE];
int num = 0;//记录有几个网络接口卡
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING
NULL
&alldevs
errbuf) == -1)
{
cout << “have errors“ << endl;
}

for (d = alldevs; d != NULL; d = d->next)
{
cout << “number“ << num + 1 << “:“ << endl;
cout << “NAME   : “ << d->name << endl;//输出网络接口卡设备的名字
cout << “DEscriptION: “ << d->description << endl;//获取该网络接口卡设备的描述信息
num++;


for (a = d->addresses; a != NULL; a = a->next)
{
if (a->addr->sa_family == AF_INET)
{
cout << “IP地址:“;
print((((sockaddr_in *)a->addr)->sin_addr).s_addr);
cout << “子网掩码:“;
print((((sockaddr_in *)a->netmask)->sin_addr).s_addr);
cout << “广播地址:“;
print((((sockaddr_in *)a->broadaddr)->sin_addr).s_addr);
cout << endl;
// cout << “目的地址:“;
// print((((sockaddr_in *)a->dstaddr)->sin_addr).s_addr);
}
}

}

cout << “共有“ << num << “个网络接口卡“ << endl;


cout << “你想打开第几个网络接口卡?“ << endl;
int in;
cin >> in;
in--;
int i = 0;
for (d = alldevs; d != NULL&&i != in; d = d->next)
{
i++;
}
////////////////打印出来IP等///////
for (a = d->addresses; a != NULL; a = a->next)
{
if (a->addr->sa_family == AF_INET)
{
cout << “IP地址:“;
print((((sockaddr_in *)a->addr)->sin_addr).s_addr);
cout << “子网掩码:“;
print((((sockaddr_in *)a->netmask)->sin_addr).s_addr);
cout << “广播地址:“;
print((((sockaddr_in *)a->broadaddr)->sin_addr).s_addr);
cout << endl;
// cout << “目的地址:“;
// print((((sockaddr_in *)a->dstaddr)->sin_addr).s_addr);

ULONG NetMask DesNet NextHop;
DesNet = (((sockaddr_in *)a->addr)->sin_ad

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

     文件       1973  2014-09-16 08:49  标头.h

     文件      16825  2014-09-16 08:52  源.cpp

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

                18798                    2


评论

共有 条评论