資源簡介
有關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:?“?< return?-1;
}
ofstream?outFile(argv[2]?ios::out|ios::trunc|ios::binary);
if?(!outFile)
{
cerr?<“Cannot?create?file:?“?< 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信息安全管理體系實施指南
評論
共有 條評論