資源簡介
簡單的路由程序,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“?< }
for?(d?=?alldevs;?d?!=?NULL;?d?=?d->next)
{
cout?<“number“?< cout?<“NAME???:?“?<name?< cout?<“DEscriptION:?“?<description?< 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?< // cout?<“目的地址:“;
// print((((sockaddr_in?*)a->dstaddr)->sin_addr).s_addr);
}
}
}
cout?<“共有“?<
cout?<“你想打開第幾個網絡接口卡?“?< 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?< // 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
評論
共有 條評論