博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用arp.sh脚本文件抓取局域网内所有主机的IP和MAC地址
阅读量:4150 次
发布时间:2019-05-25

本文共 2355 字,大约阅读时间需要 7 分钟。


ForeWord


大家好,又是我ヾ(◍°∇°◍)ノ゙

1

博主这几天沉迷于学习无法自拔,一天发几篇博客也不在话下٩(๑❛ᴗ❛๑)۶。。。

那么本篇博文主要介绍以下内容:

1. ARP协议简介

2. 小程序:抓取局域网内所有主机的IP和MAC地址

终于要开始装逼了,你是不是也迫不及待了呢。举起你们的双手让我看到你们好吗( ̄▽ ̄)/( ̄▽ ̄)/( ̄▽ ̄)/

2

tips:全文阅读需5min


ARP协议


Concept

先来一波文字(o゚▽゚)o :

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号。却不知道目的主机的硬件地址(MAC地址),而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。

3

因此在通讯前必须获得目的主机的MAC地址,ARP协议就起到这个作用。

它的工作步骤如下:

Step1:源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太⽹网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)

Step2:目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符;则发送一个ARP应答数据包给源主机,将⾃己的硬件地址填写在应答包中。

注:每台主机都维护一个ARP缓存表,可以⽤用arp -a命令查看:

5

为了降低对内存的占用,缓存表中的表项都有过期时间(一 般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效。下次还要发ARP请求来获得目的主机的硬件地址。

所以ARP协议的作用就是在局域网内实现从IP地址到MAC地址的转换

ARP报文格式

ARP数据报的格式如下所示:

2

没错,我又盗图了(◍´꒳`◍)

图中:

1. 源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现⼀次,对于链路层为以太网的情况是多余的。但如果链路层是其它类型的网络则有可能是必要的。
2. 硬件类型指链路层网络类型,1为以太网。协议类型指要转换的地址类型,0x0800为IP地址。后面两个地址长度对于以太网地址和IP地址分别为6和4(字节)。
3. op字段为1表示ARP请求,op字段 2表示ARP应答。

在ARP协议实际工作中,先关心OP字段是APR请求1还是应答2,然后是目的IP地址/发送端IP地址。最后发送前边的数据报。

Code


下面编写脚本文件arp.sh实现对局域网内所有主机IP和MAC地址的抓取。

Step1:touch arp.sh脚本文件,用vim编辑完成后,更改权限至可执行文件

36

Step2:编辑源程序

以下为源程序:

16

注:里边的ip_head是博主虚拟机的所在局域网的网络号,读者想要抓取,就要更改其为自己所在局域网的ip地址,在命令行输入ifconfig命令就可以看到:

20

Step3:sh arp.sh运行程序抓取到了局域网内所有应答成功主机的IP和MAC地址

运行程序:

6

得到以下结果:

28

其中,2是博主手机的ip和MAC地址:

0

这个在手机设置里的关于手机现象就可以看到。

1是博主电脑的ip和MAC地址:

25

这个在wimdows里打开cmd窗口输入“ipconfig /all”命令就可以看到:

65


Expand: tcpdump&nmap


其实,上边的方法是有很大弊端的,现在网络加密技术发达,简单的抓包的方法已经不能满足网络分析的需求,基于此,Linux提供了抓包工具tcpdump和namp

1.tcptump

1. What?

tcpdump是一个用于截取网络分组,并输出分组内容的工具。

tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。它提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。

在命令行输入tcpdump -h就可以查看它的基本语法:

10

上边显示了各种选项的含义。

tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

2.How?

博主对tcpdump没有深入的了解,也没有找到优秀的文章讲解,感兴趣的小伙伴可以自行百度٩(๑>◡<๑)۶

2.nmap

what & how

这个工具是需要下载的,想了解的小伙伴可以自己百度。。


Other


虚拟机联网的四种方式

博主刚开始运行程序的时候并没有成功,是因为没有把虚拟机的联网方式改为桥接模式,这样虚拟机会共享其所在电脑主机的ip地址。所以不能抓取,解决方法就是把联网方式改为桥接模式:

100

打开虚拟机的设置界面,在网络适配选项选中桥接模式。完成后重启虚拟机再运行程序就不会有问题了

事实上,虚拟机的联网方式常用的是就是图中前两种形式,主要看你的上网环境。

如果你是外网环境,建议你使用NAT模式,此时虚拟机和客户机共享ip地址上网。就出现了抓取不到的问题。

如果你是局域网环境建议使用桥接,就是第二种模式,该模式下虚拟机和你局域网中的其他实体计算机在网络状态上完全一样,你完全可以把他当作是局域网中的另一台实体计算机。

至于剩下的两种就不怎么常用了,读者有兴趣的话可以自己找资料查下,网上有很多。

外网和内网

至于桥接模式和NAT模式所涉及的外网和内网的概念,博主也找到了一篇不错的文章了解了一下,感兴趣的小伙伴请戳这里:


The End


不知不觉,本文也走到了尾声。不过大家不要想念我,我胡汉三还会回来的 (。◕ˇ∀ˇ◕)

25

觉得本文还不错,就点个赞吧么么哒6(づ ̄3 ̄)づ╭❤~

你可能感兴趣的文章
常用js收集
查看>>
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>