时间:2024-05-04
庞天琪,黄娇玉,王一博,徐铭作,尹竹,刘雪飞
(北京信息科技大学,北京 100101)
网络互联互通的信息化时代下,个人信息隐私安全、计算安全、传输安全等的重要性愈发体现出来,由于网络本身具有的不安全性因素以及网络通信协议所存在的缺陷,网络遭受入侵、受到破坏的情况频生。为此,要想保障信息安全就要了解一定的网络攻击知识和手段[1],定期对网络进行安全性分析,及时预防、发现和修正网络中的薄弱环节来保障网络及其中各节点安全。
端口扫描[2]是一种非常重要的预探测手段,对此进行研究可以对潜在的网络攻击进行预警;网络流量信息中包含着网络通信双方的全部信息,对网络流量进行解析能够及时发现网络中的异常流量以及时阻断攻击[3]。
计算机在数据传输过程中会将不同的包交给不同的服务进行处理,不同的服务对应不同的端口。在此情形下,想要对潜在的网络攻击进行预警就需要对端口进行扫描。
端口扫描工具一般是通过对目标主机端口以某种扫描技术进行扫描,通过目标主机的端口开放情况以及端口信息进一步了解目标主机所提供的服务类型,由此来寻找目标主机的安全弱点[4]。
本软件对端口扫描的设计分为两部分:端口扫描和IP存活扫描。端口扫描分为单个IP扫描端口开放情况和IP段各主机的端口开放情况扫描;IP存活扫描就是对某一IP段下主机存活情况的获取。
在对目标主机进行端口扫描之前首先要对输入的IP、端口、线程数进行合法性检查(比如使用正则表达式检查IP 地址的每一字节是否在0-255 之间),然后根据输入的起始端口和结束端口号设置循环,创建套接字[5]socket[6]实例实现对目标主机对应端口建立连接,连接成功说明端口开放,则通过端口号输出信息,连接失败说明端口关闭,则输出关闭信息;对于IP 段存活主机扫描的实现是通过调用系统的Runtime.get-Runtime().exec()来实现,通过程序调用类似“ping ip地址-n ping的次数-w 应答超时”这样的命令来得到回复结果,使用正则表达式匹配“d+ms”“ttl”等字段信息来判断是否能够ping通也就是对方系统是否存活,需要注意的是,当对方禁止icmp 入站规则时,或者开启防火墙等,都会对该结果造成影响。
在此模块中,为减少等待时间可使用Java 多线程[7]。在扫描某一台主机的端口开放情况时,根据输入的起始和结束端口号将其进行分段并创建线程,每一段线程执行一段端口号区间的扫描任务,如果扫描的是一段IP下各主机的端口,则创建多个线程检查方法是否被占用,即使用synchronized 关键字对调用Scan扫描类的方法加锁实现,扫描IP段存活主机时也要如上述方法一样,检查输入IP 是否合法,如不合法则提示输入错误,如合法则将该IP段按顺序逐个插入集合中并创建多线程调用命令并对返回值进行正则表达式匹配判断是否存活。
考虑到端口扫描的对象也可以是某一网址,本软件还实现了以下功能:当对给定的网址进行端口扫描时,先获取到IP 地址,再通过IP 地址进行扫描,此项实现是通过调用系统的“nslookup -an”命令实现对DNS域名解析并将解析结果截取再显示输出,达到获取IP地址的目的。
协议分析主要是对网络数据包的协议头和协议尾部进行分析,从而可以了解相关的数据包的产生和传输行为,通过对网络数据包的分析达到监控网络流量、分析网络数据以及执行网络安全操作等目的。
对于协议的分析,其基础是对网络数据包进行分析,网络数据包在不同层进行不同的封装传输,就具备不同的报文类型,而报文是网络传输的单位,在传输过程中报文会不断地封装成分组、数据包、数据帧来进行传输,因此了解了各层协议[8]及封装机制后,可以根据Java封装、继承、多态的特点来设计类间关系,实现对捕获到的不同数据包的解析。
考虑到数据包的来源可以是从本地网卡列表中选取监听并捕获到的,此项可以将其保存至本地;也可以是保存的具有代表意义的pcap文件,故按照两个模块进行设计实现(对于文件来源可以设置布尔型变量isopening判断:true代表来自本机,false代表是刚捕获到的)。
2.2.1 捕获网络数据包
要想从网络中捕获数据包,首先必须获取本机的网络接口列表,Jpcap[9]提供了方法JpcapCaptor.get-DeviceList()完成这个任务,一旦有了网络接口列表就可以选定用于捕获数据包的网络接口,可以使用方法JpcapCaptor.openDevice()来打开指定的网络接口,本软件指定参数如下:(device“,65535”,true,20),分别代表需要打开的网络接口、每一次捕获的网络数据包的最大字节数、采用网卡的混杂模式以捕捉所有经过该网卡的网络数据包、数据包捕获的超时设置为2 毫秒。当我们获得了网络接口对象(JpcapCaptor实例)后便可以捕获来自此网络接口的数据包,在本软件中使用逐个捕捉法:packet=captor.getPacket(),此方法每次只能返回一个捕获的数据包,因此当网络接口处在开放状态时,循环使用此方法连续捕获数据包。
关于数据包的分析过滤,本软件设置PacketAnalyze 类用作数据包分析,首先通过packetClass()方法实现对数据包属于什么协议的判断,再调用各协议对应的方法进行分析(主要是首部分析)显示以供user 阅读或分析。在抓包类中使用TestFilter 方法设置过滤规则返回布尔型变量,用于判断捕获到的数据包是否为目标数据包再进行下一步操作,判断的方法为对于捕获到的数据包实例使用本类中的set-Filter()方法,根据变量FilterMess 的值是否包含关键字判断是否为目标捕获数据包,是则返回真并保留,否则返回假并遗弃此包。在显示方面,本软件将协议的分析结果放入集合中,在显示时遍历输出,为了保证输出时的顺序为插入的顺序,这里使用Linked-HashMap 集合对结果进行存储,利用其访问速度快的优点保障显示结果的即时性;对于列表中每个数据包对象的分析是通过表格的getSelectedRow()方法得到选中对象的索引值,以获取对应数据包并调用相应的数据包分析方法进行分析。在单击表格项时,其详细信息展示在初始界面的东部(具体设计为上半部分展示协议首部各个字段信息,下半部分展示数据部分和十六进制信息),在双击时可查看详细信息。对于捕获到的数据包可以保存到本地,首先通过布尔型变量isWorking 判断当前是否已经停止捕获(返回真代表正在捕获,返回假代表已停止捕获),然后使用openDumpFile()方法获得实例,再用write-Packet()方法对数据包进行存储。
对于数据包的解析功能还设置了路由追踪和数据源追踪。路由追踪是用来查看本地到捕获到的数据包中指向的目标IP经过的路径信息,以便对路径中的各节点进行其他操作,实现是通过RunTime.getRuntimr().exec()调用系统的命令提示符来实现“tract IP 地址”的命令;对于数据包的数据源追踪是用来补充上述的数据包首部分析功能以达到显示数据具体信息便于进一步分析的目的,实现起来是先对其进行协议判断后解封装再获取并存储具体数据部分。
2.2.2 本地pcap文件解析
对于捕获到的网络数据包可以保存到本地。同样的,我们也可以打开此类型文件进行解析。根据pcap 文件的特点可设计解析流程为:解压缩文件、解析Pcap Header、解析Packet Header、根据包头信息判断协议类型并解析Packet Data。
12月7日,太仓为了更深入地扎根中国市场,更全面地满足用户实际需求,更快更及时地响应服务用户,全球领先的金属加工解决方案供应商埃马克集团将其太仓工厂移址新居,不仅厂房面积翻倍,服务功能也得到全面升级。为此埃马克举办了盛大的开业典礼,同期还举行了第七届埃马克技术博览会,在展示多种创新技术与产品的同时,还聚焦了新能源汽车等当前热门行业的多样高效解决方案。
首先打开文件时为方便选择,设置Filter 类实现文件过滤只打开pcap格式的文件:先将文件选择器的setAcceptAllFilterUsed()方法设为false 禁止显示所有文件,再将文件拓展名“pcap”存入数组集合变量extensions中,然后遍历目录下所有文件,若是pcap格式的返回真并显示,若不是则返回假。
在pcap .pcapAnalyze 包中主要通过Pcapparser类实现对本地pcap 文件的读取和解析:在此类中定义解压方法unpack()来将pcap 文件分解为pacap 头和pcap 文件数据包头以及pcap 数据内容三个部分,其中pcap 数据内容需进一步分析。ProtocolJudge 类实现判断pcap 文件中数据包使用的协议并将其进一步解封装分析的功能,流程为(以arp 包为例):利用Ethernet 类对以太网帧进行解封装得到以太网帧首部和以太网帧的数据部分、利用ARP 类对arp 报文进行解封装得到具体信息(包括首部各字段和数据内容)、调用ByteArray 类实现对内容的转换(由于计算机存储数据时,是以字节为基本存储单位的,因此需要将其转换为能够直观看得懂的字符串。ByteArray类中定义了一系列方法,用于实现字节数组与十六进制字符串之间的转换、字节数组与int 型之间的转换等)并使用平时容易理解和接收的方式将其显示出来。
本软件设计两个界面:初始界面和端口扫描界面,依托Swing 框架完成,软件整体功能按照菜单展示,如图1所示。
图1 软件整体功能
基于上述功能界面设计界面如下:初始界面使用的是边界布局,将整个界面分为北、中、东和南四个大区域,每个大区域再划分为几个小区域,界面北部用于显示菜单模块,中部区域用于显示展示数据包列表的表格,东部区域用于显示数据包的分析结果,南部区域用于动态更新当前捕获状态及捕获到的数据包数量。端口扫描界面使用的是JTabledPane 选项卡面板,在此面板中user通过点击界面上方的选项来实现端口扫描、IP 扫描以及网址扫描之间的界面切换,这样设计可以减少窗体个数,在每个界面中再细分模块为结果显示模块、扫描参数输入模块、扫描状态和按钮显示模块,在扫描参数模块采用流式布局,根据各界面需求设置显示文本及输入框。
在初始界面进行网络数据包捕获时设计使用Swing 组件中实现滚动条的JScrollPane 类实现垂直滚动表格视图来达到展示多个数据包的关键信息的目的,user 可以拖动滚动条完整浏览整个列表;在列表下方(界面南部)设置JLabel 对象显示当前捕获状态以及捕获量便于实时了解捕获数据包的数量,动态更新JLabel 的值依赖于当前表格行数的获取,每添加一个数据包就更新一次JLabel 的值,在端口扫描界面对端口数量的显示更新也是相同的方法。在进行网络数据包捕获和分析本地pcap文件时可以对捕获到的数据包进行过滤,即上述功能存在互相调用的关系。
系统:Windows 10
软件:IntelliJ IDEA 2022.2.1
gradle版本:7.4
端口扫描功能如图2所示。
图2 端口扫描
网络数据包捕获过滤分析功能如图3所示。
图3 网络数据包捕获过滤分析
本地pcap文件解析如图4所示。
图4 本地pacap文件解析
端口扫描和协议数据分析只是网络安全的基础部分,在此基础上建立起适合本网络的流量模型以便及时发现异常流量是下一步开展的工作方向。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!