ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx

上传人:b****3 文档编号:16608445 上传时间:2022-11-24 格式:DOCX 页数:9 大小:74.91KB
下载 相关 举报
ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx_第1页
第1页 / 共9页
ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx_第2页
第2页 / 共9页
ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx_第3页
第3页 / 共9页
ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx_第4页
第4页 / 共9页
ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx

《ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx》由会员分享,可在线阅读,更多相关《ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

ARP协议获取局域网内部活动主机物理地址的程序实现Word下载.docx

使用ARP协议获取局域网内部活动主机物理地址的程序实现(Java)

已知技术参数和设计要求

1.已知参数:

选择适当的网络适配器,以绑定Winpcap。

2.设计要求:

2.1协议实现需要哪些数据帧?

注意要数据帧的定义要符合公共标准。

2.2如何实现数据帧的发送?

2.3如何接收及解析目的主机的响应数据帧?

2.4如何显示ARP协议的执行结果?

3.JAVA环境为Eclipse

设计内容与步骤

1.熟悉ARP协议的工作原理;

2.熟悉ARP协议相关数据帧结构;

3.构造ARP请求数据帧;

4.使用Winpcap相关函数实现数据帧的发送;

5.接收及解析目的主机的响应数据帧;

6.获得IP地址与MAC地址的对应关系并显示;

7.课程设计任务说明书。

设计工作计划与进度安排

1.知识准备,整体思路设计2小时

2.开发环境与程序调试环境4小时

3.构造协议需要的相关数据帧,使用标准数据帧结构2小时

4.数据帧的发送10小时

5.接收、解析目的主机的相应数据帧,并显示结果12小时

6.课程设计说明书10小时10小时

设计考核要求

1.出勤20%

2.答辩或演示30%

3.课程设计说明书50%

使用ARP协议获取局域网内部活动主机物理地址的程序实现

一、问题描述

构造多个Arp的数据帧。

输入:

局域网中的IP地址;

输出:

从控制台屏幕输出局域网内部活动主机物理地址。

二、基本要求

1.协议实现需要哪些数据帧?

2.如何实现数据帧的发送

3.如何接收及解析目的主机的响应数据帧

4.如何显示ARP协议的执行结果

三、设计思想

首先构造ARP的数据包,然后通过java对网卡数据捕获需要用到jpcap,jpcap调用wincap实现数据包的发送,并监听返回的数据包,显示出来。

四、系统结构

程序可以分为两部分:

1:

程序构造具体的ARP数据包,发送。

2:

监听返回的数据包,并显示结果。

五、程序流程

程序一开始会要求用户输入本机所在局域网内的IP字段,再通过循环对每个目的IP发送请求包(根据构造目的IP构造的ARP请求包)。

当发送完ARP的请求包,系统就会在监听状态,等待是否返回响应包。

如果有返回包,说明此IP在局域网中并且处于活动状态,解析显示结果。

如果没有返回包,说明此IP没有在局域网或者处于关机状态

六、源程序

importjpcap.JpcapCaptor;

importjpcap.JpcapSender;

importjava.util.Arrays;

import.InetAddress;

import.Inet4Address;

importjpcap.packet.ARPPacket;

importjpcap.packet.EthernetPacket;

importjpcap.NetworkInterface;

importjpcap.NetworkInterfaceAddress;

publicclassDemo2{

publicstaticARPPacketgetTargetMAC(InetAddresstargetIp){

NetworkInterface[]devices=JpcapCaptor.getDeviceList();

NetworkInterfacedevice=null;

//寻找适合的网络设备

loop:

for(NetworkInterfaced:

devices){

for(NetworkInterfaceAddressaddr:

d.addresses){

if(!

(addr.addressinstanceofInet4Address))

continue;

byte[]bip=targetIp.getAddress();

byte[]subnet=addr.subnet.getAddress();

byte[]bif=addr.address.getAddress();

for(inti=0;

i<

4;

i++){

bip[i]=(byte)(bip[i]&

subnet[i]);

bif[i]=(byte)(bif[i]&

}

if(Arrays.equals(bip,bif)){

device=d;

breakloop;

}

}

if(device==null)

thrownewIllegalArgumentException(targetIp

+"

isnotalocaladdress"

);

JpcapCaptorcaptor=null;

//打开一个网络数据包捕捉者

try{

captor=JpcapCaptor.openDevice(device,2000,false,300);

//只接收ARP数包

captor.setFilter("

arp"

true);

}catch(Exceptione){

//获得发送数据包的实例

JpcapSendersender=captor.getJpcapSenderInstance();

InetAddresssrcip=null;

for(NetworkInterfaceAddressaddr:

device.addresses)

if(addr.addressinstanceofInet4Address){

srcip=addr.address;

break;

//进行广播数据报的MAC地址

byte[]broadcast=newbyte[]{(byte)255,(byte)255,(byte)255,

(byte)255,(byte)255,(byte)255};

//构造REQUEST类型的ARP的数据包

ARPPacketarp=newARPPacket();

arp.hardtype=ARPPacket.HARDTYPE_ETHER;

arp.prototype=ARPPacket.PROTOTYPE_IP;

arp.operation=ARPPacket.ARP_REQUEST;

arp.hlen=6;

arp.plen=4;

//源MAC地址

arp.sender_hardaddr=device.mac_address;

//源IP地址

arp.sender_protoaddr=srcip.getAddress();

//目地MAC地址:

广播地址全为1(二进制)

arp.target_hardaddr=broadcast;

//目地IP地址

arp.target_protoaddr=targetIp.getAddress();

//构造以太网头部

EthernetPacketether=newEthernetPacket();

ether.frametype=EthernetPacket.ETHERTYPE_ARP;

ether.src_mac=device.mac_address;

ether.dst_mac=broadcast;

//ARP数据包加上以网关头部

arp.datalink=ether;

//向局域网广播ARP请求数据报

sender.sendPacket(arp);

//接收目标主面的答应ARP数据报

while(true){

ARPPacketp=(ARPPacket)captor.getPacket();

//接收返回包

if(p==null){

System.out.println(targetIp+"

不是本地局域网的IP号"

returnp;

}elseif(Arrays.equals(p.target_protoaddr,srcip.getAddress())){

}

publicstaticvoidmain(String[]args)throwsException{

Strings="

10.13.72."

;

for(intn=1;

n<

=254;

n++){

System.out.println(s+n);

ARPPacketarpP=Demo2.getTargetMAC(InetAddress.getByName(s+n));

if(arpP==null){}

else{

System.out.println("

硬件类型:

"

+arpP.hardtype);

操作类型:

+arpP.operation);

源 

MAC 

地址:

+arpP.getSenderHardwareAddress());

IP 

地址 

+arpP.getSenderProtocolAddress());

目标 

+arpP.getTargetHardwareAddress());

+arpP.getTargetProtocolAddress());

==================================="

}

七、测试数据

循环输入局域网中的ip10.15.130.0/24

八、测试情况

结论

通过这段时间对本系统的设计与实现,我们成长了很多,也增长了不少知识。

也认识到了自己的不足之处:

以前总是眼高手低,现在真动手操作了,才知道,要想熟练的运用学过的知识,也不是一件简单易行的事情,需要不断的积累,不断的实践,不断的总结经验和教训。

同时,在设计过程中,遇到不会的问题应及时跟同学老师交流,或者查阅相关文献资料,这样才能提高工作效率,并且提高自己的自信心,同时也可以增强团队合作能力,和与他人的沟通能力。

这次实践将会是我们人生的一笔宝贵财富。

参考文献

[1][美]RogersCadenhead.Java.梅兴文译.第4版.北京:

人民邮电出版社,2007

[2][美]BruceEckel.ThinkingInJava.英文第4版.北京:

机械工业出版社,2007

[3]陈轶.姚晓昆编著.Java程序设计实验指导.北京:

清华大学出版社,2006

[4]杨昭编著.二级Java语言程序设计教程.北京:

中国水利水电出版社,2006

[5]赵文靖编著.Java程序设计基础与上机指导.北京:

[6]赵毅主编.跨平台程序设计语言——Java.西安:

西安电子科技大学出版社,2006

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1