资源简介
有关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个文件信息
- 上一篇:像素不是方形的
- 下一篇:ISO27003信息安全管理体系实施指南
相关资源
- Socket Raw实现的IPV4INIPV6 UDP数据包发送
- IPV6 VRRP实验.docx
- RFC6282(中文版)基于IEEE 802.15.4网路的
- RFC4944中文版在IEEE 802.15.4网路上传送
- ipv6神州数码配置手册
- IPV6 技术培训
- esp8266-RTOS SDK IPV6
- IPV6子网划分工具
- tcp ipv6 pcap 数据包
- IPv6下网络攻击的研究与实现
- 微软官网修复IPv6的工具包合集
- 基于概率神经网络的IPv6入侵检测技术
- ipv4向ipv6过渡技术
- 使用WinPcap抓取ipv4和ipv6数据包
- 基于Windows的IPv6实验环境搭建及测试
- Openwrt/LEDE 无线中继支持IPV4和IPV6
- IPv6城域网方案
- 禁用-启用ipv6
- 稳定流畅IPv6直播源
- TCP/UDP/IP/IPv6 异步通信调试工具
- IPV4和IPV6兼容的socket编程(原著)
- ipv6设置工具包-enable_ipv6.bat-ipv6修复
- 企业实施IPv6之路
- 支持 tcp udp ipv4 ipv6 跨平台运行 有服务
- linux MIPv6 源代码
- 移动IPv6源码 mipv6-2.0.2.tar.gz
- RFC-5340 OSPFv3 for IPv6 的中文翻译
- 校园网从ipv4到ipv6过渡策略研究开题报
- ipv6和ipv4校园传输
- ipv6数据包(有HTTPrtp协议)
评论
共有 条评论