77范文网 - 专业文章范例文档资料分享平台

计算机网络课程设计

来源:网络收集 时间:2020-04-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

发送Ethernet ARP包

一、课程设计目的

IP地址将不同的物理地址统一起来,从而将物理地址隐藏起来,上层软件使用IP地址标识结点。但是。两台计算机只有在知道彼此的物理地址时才能进行通信。

IP数据包常通过Ethernet发送。Ethernet设备并不识别32位IP地址,它们是以48位MAC地址传输Ethernet数据包的。因此,IP驱动器必须把IP目的地址转换成Ethernet网络目的地址。这两种地址之间存在着某种静态的或动态的映射,通常需要查看一张表来进行这种映射。这种地址协议(ARP)就是用来确定这些映象的协议。

ARP工作时,送出一个所希望的IP地址的Ethernet广播数据包。目的地主机以一个含有IP和Ethernet地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。

本课程设计的目的是进一步熟悉ARP协议的帧结构以及它的运行过程

二、课程设计要求

在熟悉ARP协议并了解Winpcap编程的前提下,构造ARP包,选择并打开网卡,将

ARP包发送出去。

1) 命令行格式:

arpsend src_ip src_mac dst_mac flag 其中arpsend作为程序名。 各参数意义:

src_ip: 源IP地址。 src_mac: 源MAC地址。 dst_ip: 目的IP地址。

dst_mac: 目的MAC地址。

Flag:0表示ARP请求;1表示ARP应答。

三、课程设计相关知识

1. ARP协议概述

ARP,即地址解析协议,实现通过IP地址得知其物理地址。在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。这样就存在把IP地址变换成物理地址的地址转换问题。以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。 2.ARP工作原理

我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机

A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。 3、ARP包的填充

将命令行的参数作适当的转换后填到ARP分组结构的各字段中即可。

要注意的是,填充请求包时。因为包要在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。“填充数据”字段要填充为0

四、课程设计分析

1.程序流程

2.核心代码及说明 头文件: #pragma once

//#include #include #include \#include \#include \#include \

//#pragma comment(lib, \#pragma comment(lib, \

#pragma comment(lib, \#define MAX_ADAPTER 10 #define MAX_ARP

20

// 网卡信息

typedef struct AdapterInfo {

char szDeviceName[128]; // 名字 char szIPAddrStr[16]; // IP

char szHWAddrStr[18]; // MAC DWORD dwIndex; // 编号 }INFO_ADAPTER, *PINFO_ADAPTER;

// ARP条目信息

typedef struct ARPInfo {

char szIPAddrStr[16]; // IP

char szHWAddrStr[18]; // MAC

DWORD dwType; // 类型 }INFO_ARP, *PINFO_ARP;

class CSysInfo { public:

CSysInfo(void); ~CSysInfo(void);

static void AddAdapInfoToList(CListCtrl& list);

static void AddARPInfoToList(CListCtrl& list,const short nAdpaterIndex);

inline static char* GetCurAdapterName(const short nAdapterIndex) // 返回对应网

卡名字 { return AdapterList[nAdapterIndex].szDeviceName; }

static char* GetCurAdapterMAC(const short nAdapterIndex); // 返回对应网卡MAC

inline static char* GetCurAdapterIP(const short nAdapterIndex) //返回对应网卡IP { }

static void formatStrToMAC(const LPSTR lpHWAddrStr,unsigned char *HWAddr);//

return AdapterList[nAdapterIndex].szIPAddrStr;

用户输入的MAC地址字符串赋给数据包结构体

private: static INFO_ADAPTER 表 static INFO_ARP };

AdapterList[ MAX_ADAPTER]; // 网卡列

]; // ARP列表

ARPList[MAX_ARP

static void formatMACToStr(LPSTR lpHWAddrStr,const unsigned char *HWAddr);

源代码:

#include \

#include \

INFO_ADAPTER CSysInfo::AdapterList[MAX_ADAPTER]; INFO_ARP CSysInfo::ARPList[MAX_ARP];

CSysInfo::CSysInfo(void) { }

CSysInfo::~CSysInfo(void) { }

void CSysInfo::AddAdapInfoToList(CListCtrl& list)//获得系统的网卡信息,并将其添加到list控件中 {

char tempChar;

ULONG uListSize=1; PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息 int nAdapterIndex = 0;

DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize);

// 关键函数,调用GetAdaptersInfo函数获取网络需求缓冲区信息,并存到uListSize中

if

(dwRet

==

ERROR_BUFFER_OVERFLOW)

//

调

用

GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize)成功

{

PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);//给pAdapterInfo分配uListSize大小的内存空间

dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);//获取网络信息,并存

储到pAdapterListBuffer

if (dwRet == ERROR_SUCCESS)//GetAdaptersInfo(pAdapterInfo,&uListSize)函数成功 {

调

用

pAdapter = pAdapterListBuffer;

while (pAdapter) // 枚举网卡,然后将相关条目添

加到List中 {

CString strTemp = pAdapter->AdapterName; // 网卡名字 strTemp = \ // 加上前缀 list.InsertItem(nAdapterIndex,strTemp); strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);

strcpy(AdapterList[nAdapterIndex].szIPAddrStr, pAdapter->IpAddressList.IpAddress.String );// IP

list.SetItemText(nAdapterIndex,1,AdapterList[nAdapterIndex].szIPAddrStr);

AdapterList[nAdapterIndex].szHWAddrStr,

formatMACToStr( pAdapter->Address ); // MAC

list.SetItemText(nAdapterIndex,2,AdapterList[nAdapterIndex].szHWAddrStr);

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库计算机网络课程设计在线全文阅读。

计算机网络课程设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/959924.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: