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

资源简介

有关ipv6报文封装的程序,还有地址生成的源代码

资源截图

代码片段和文件信息

#include 
#include 
#include “Iphlpapi.h“
#include “ipv6pkt.h“

#pragma comment(lib “Ws2_32.lib“)
#pragma comment(lib “Iphlpapi.lib“)

int main(int argc char *argv[])
{
//检查命令行参数
if (argc != 3)
{
cout << “\nUsage: ipv6pkt.exe inputfile outputfile\n“;
return -1;
}

//打开输入输出文件
ifstream inFile(argv[1] ios::in|ios::nocreate|ios::binary);
if (!inFile)
{
cerr << “Cannot open file: “ << argv[1] << endl;
return -1;
}
ofstream outFile(argv[2] ios::out|ios::trunc|ios::binary);
if (!outFile)
{
cerr << “Cannot create file: “ << argv[2] << endl;
inFile.close();
return -1;
}

//建立输出缓冲区
char Buf[sizeof(IPV6_HEADER) + MAX_PAYLOAD_LEN];
IPV6_HEADER* pIPv6Hdr = (IPV6_HEADER*)Buf;

//首先填充数据字段
inFile.read(Buf+sizeof(IPV6_HEADER) MAX_PAYLOAD_LEN);
int iDataCount = inFile.gcount();

//填充IPv6基本报头
//4位版本号
pIPv6Hdr->ver_cls_lab = 6;
//8位流量等级
pIPv6Hdr->ver_cls_lab <<= 8;
pIPv6Hdr->ver_cls_lab += 0;
//20位流标签
pIPv6Hdr->ver_cls_lab <<= 20;
pIPv6Hdr->ver_cls_lab += 0;
pIPv6Hdr->ver_cls_lab = htonl(pIPv6Hdr->ver_cls_lab);
//16位载荷长度
pIPv6Hdr->payload_len = htons(iDataCount);
//8位下一首部
pIPv6Hdr->next_header = IPPROTO_TCP;
//8位跳数限制
pIPv6Hdr->hop_limit = 128;

//128位源地址,由本机Mac地址生成
pIPv6Hdr->src_ip.prefix_subnetid = 0x1; //3位全球单播地址前缀
pIPv6Hdr->src_ip.prefix_subnetid <<= 45;
pIPv6Hdr->src_ip.prefix_subnetid += 0x01;//45位全球路由前缀
pIPv6Hdr->src_ip.prefix_subnetid <<= 16;
pIPv6Hdr->src_ip.prefix_subnetid += 0x01;//16位子网ID
pIPv6Hdr->src_ip.prefix_subnetid = hton64(pIPv6Hdr->src_ip.prefix_subnetid);

//获取本机网络接口信息列表
IP_ADAPTER_INFO *pAdapterInfo = new IP_ADAPTER_INFO;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
DWORD dwRetVal = GetAdaptersInfo(pAdapterInfo &ulOutBufLen);
if (dwRetVal == ERROR_BUFFER_OVERFLOW)
{
delete pAdapterInfo;
pAdapterInfo = new IP_ADAPTER_INFO[ulOutBufLen/sizeof(IP_ADAPTER_INFO)];
dwRetVal = GetAdaptersInfo(pAdapterInfo &ulOutBufLen);
}
//将第一个网卡的Mac地址作为源地址
if (dwRetVal == ERROR_SUCCESS)
{
pIPv6Hdr->src_ip.interface_id[0] = pAdapterInfo->Address[0];
pIPv6Hdr->src_ip.interface_id[1] = pAdapterInfo->Address[1];
pIPv6Hdr->src_ip.interface_id[2] = pAdapterInfo->Address[2];
pIPv6Hdr->src_ip.interface_id[3] = 0xFF;
pIPv6Hdr->src_ip.interface_id[4] = 0xFE;
pIPv6Hdr->src_ip.interface_id[5] = pAdapterInfo->Address[3];
pIPv6Hdr->src_ip.interface_id[6] = pAdapterInfo->Address[4];
pIPv6Hdr->src_ip.interface_id[7] = pAdapterInfo->Address[5];
}
else //如果无法取得本机Mac地址,则使用00-00-80-1A-E6-65代替
{
cout << “Failed to GetAdaptersInfo using assumptive SrcMac 00-00-80-1A-E6-65 instead.\n“;
pIPv6Hdr->src_ip.interface_id[0] = 0x00;
pIPv6Hdr->src_ip.interface_id[1] = 0x00;
pIPv6Hdr->src_ip.interface_id[2] = 0x80;
pIPv6Hdr->src_ip.interface_id[3] = 0xFF;
pIPv6Hdr->src_ip.interface_id[4] = 0xFE;
pIPv6Hdr->src_ip.interface_id[5] = 0x1A;
pIPv6Hdr->src_ip.interface_id[6] 

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

     文件       9512  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\IPHelper\IPEXPORT.H

     文件      15896  2004-01-23 23:44  第7章 IPv6报文封装及地址生成程序\IPHelper\Iphlpapi.h

     文件      84498  2003-11-17 20:39  第7章 IPv6报文封装及地址生成程序\IPHelper\IPHLPAPI.LIB

     文件      24450  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\IPHelper\IPRTRMIB.H

     文件       6810  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\IPHelper\IPTYPES.H

     文件       9512  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\IPEXPORT.H

     文件      15896  2004-01-23 23:44  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\Iphlpapi.h

     文件      84498  2003-11-17 20:39  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\IPHLPAPI.LIB

     文件       6810  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\IPTYPES.H

     文件       4487  2007-04-20 22:36  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.cpp

     文件       4356  2007-04-20 16:24  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.dsp

     文件        539  2007-04-19 09:48  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.dsw

     文件        719  2007-04-20 13:32  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.h

     文件      66560  2007-06-27 19:12  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.ncb

     文件      48640  2007-06-27 19:12  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.opt

     文件       1484  2007-06-27 19:10  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Code\ipv6pkt.plg

     文件     204912  2007-06-27 19:10  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Exe\ipv6pkt.exe

     文件          8  2007-06-06 14:40  第7章 IPv6报文封装及地址生成程序\ipv6pkt\Exe\tcpdata

     文件       9512  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\IPEXPORT.H

     文件      15896  2004-01-23 23:44  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\Iphlpapi.h

     文件      84498  2003-11-17 20:39  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\IPHLPAPI.LIB

     文件       6810  2002-01-30 17:32  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\IPTYPES.H

     文件       6004  2007-04-21 09:58  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.cpp

     文件       4358  2007-04-20 16:31  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.dsp

     文件        539  2007-04-20 16:29  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.dsw

     文件       1378  2007-04-20 22:52  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.h

     文件      50176  2007-06-27 19:14  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.ncb

     文件      48640  2007-06-27 19:14  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.opt

     文件       1328  2007-06-27 19:14  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Code\ipv6tcp.plg

     文件     204912  2007-06-27 19:14  第7章 IPv6报文封装及地址生成程序\ipv6tcp\Exe\ipv6tcp.exe

............此处省略13个文件信息

评论

共有 条评论