计算机网络课程设计:(第三章)封装Ethernet帧(完整程序代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络课程设计
第二章:封装Ethernet帧
完整程序:
#include
#include
void main(int argc,char* argv[])
{
if(argc!=3)
{
cout<<"Please input commmand: EncapFrame input_file
output_file"< return; } fstream file; file.open(argv[2],ios::in|ios::out|ios::binary|ios::trunc); for(int i=0;i<7;i++) file.put(char(0xaa)); file.put(char(0xab)); long pCrcS=file.tellp(); char dst_addr[6]={char(0x00),char(0x00),char(0xe4),char(0x86),char(0x3a),char(0xdc)}; file.write(dst_addr,sizeof(dst_addr)); char src_addr[6]={char(0x00),char(0x00),char(0x80),char(0x1a),char(0xe6),char(0x65)}; file.write(src_addr,sizeof(src_addr)); ifstream infile; infile.open(argv[1],ios::binary); infile.seekg(0,ios::end); short length=(short)infile.tellg(); file.put(char(length/256)); file.put(char(length%256)); char* data=new char[length]; infile.seekg(0,ios::beg); infile.read(data,length); file.write(data,length); infile.close(); delete data; if(length<46) for(int i=0;i<46-length;i++) file.put(char(0x00)); long pCrc=file.tellp(); file.put(char(0x00)); short total=short(file.tellp())-(short)pCrcS; file.seekg(pCrcS,ios::beg); unsigned char crc=0; while(total--) { unsigned char temp; file.get(temp); for(unsigned char i=(unsigned char)0x80;i>0;i>>=1) { if(crc&0x80) { crc<<=1; if(temp&i) crc^=0x01; crc^=0x07; } else { crc<<=1; if(temp&i) crc^=0x01; } } } file.seekp(pCrc,ios::beg); file.put(crc); file.seekg(0,ios::beg); cout<<"Content of ethernet frame: "< while(!file.eof()) { unsigned char temp; file.get(temp); cout< } cout< file.close(); } 结果: