端口扫描器的设计与实现
更新时间:2023-09-04 18:20:01 阅读量: 教育文库 文档下载
端口扫描器的设计与实现
网络与信息安全·课程设计
端口扫描器的设计与实现
网络中的每一台计算机如同一座城堡,在这些城堡中,有的对外完全开放,有的却是紧锁城门。入侵者们是如何找到,并打开它们的城门的呢?这些城门究竟通向城堡的何处呢?在网络技术中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。一般来说,扫描端口有如下目的: ·判断目标主机上开放了哪些服务; ·判断目标主机的操作系统;
如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵,本课程设计将会通过用JAVA语言实现一个小的端口扫描软件,详细描述端口扫描的原理,分析端口扫描所涉及的问题,以便更加清楚地了解入侵者如何扫描目标主机的端口,同时掌握如何确保本机的安全性,为将来设计更为安全的系统打下牢固基础。
端口扫描器的设计与实现
一、网络基础知识 ........................................................................................................ 4
1、端口的基本概念 ............................................................................................... 4 2、端口的分类 ....................................................................................................... 4 二、端口扫描的基本原理 ............................................................................................ 5
1、基本原理 ........................................................................................................... 5 2、基于JAVA语言实现的核心代码 ................................................................... 5 三、端口扫描器视图 .................................................................................................... 6
1、工作窗口 ........................................................................................................... 6 2、异常窗口 ........................................................................................................... 6 3、窗口核心代码 ................................................................................................... 6 四、多线程快速扫描 .................................................................................................... 7
1、多线程机制 ....................................................................................................... 7 2、多线程核心代码 ............................................................................................... 8 五、用户使用方法 ........................................................................................................ 9
1、页面说明 ........................................................................................................... 9 2、按主机名扫描 ................................................................................................... 9 3、按IP地址扫描 ................................................................................................. 9 六、常用端口 ................................................................................................................ 9 七、异常检测 .............................................................................................................. 10 结语 .............................................................................................................................. 12
端口扫描器的设计与实现
端口扫描器的设计与实现
一、网络基础知识
1、端口的基本概念
“端口”在计算机网络领域中是个非常重要的概念。它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。如果有需要的话,一台计算机中可以有上万个端口。
端口是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用IP端口来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向A端口就可以实现通信了。
可见,端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。
2、端口的分类
端口是一个16 bit的地址,用端口号进行标识不同作用的端口,参见表2-2和表2-3。端口一般分为两类。
■熟知端口号:范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP服务,80端口分配给HTTP服务,135端口分配给RPC服务等等
■动态端口号:动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如8080端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。
端口扫描器的设计与实现
二、端口扫描的基本原理
1、基本原理
端口扫描的原理其实非常简单,只是简单的利用JAVA提供库函数Socket进行调用,与每一个感兴趣的目标计算机的端口进行连接。如果对方端口处于监听状态,那么连接就能成功。否则,这个端口不能用,既没有提供服务。这个技术的一个最大的优点是,不需要任何权限,系统中的任何用户都有权利使用这个调用。
引入多线程机制,利用多线程扫描的好处就是速度快,如果对每个目标端口以线性的方式使用单独的连接调用,那么将会花费相当长的时间。多线程同时打开多个套接字,从而加速扫描。在本设计中用户可以自定义线程的个数。此处用户还可以自定义扫描方式。
2、基于JAVA语言实现的核心代码
//在多线程的控制下,利用for循环对端口逐一扫描 for (i =XXXXXX; i <XXXXXX; i+=XXXXXX){ }
try{
theTCPsocket=new Socket(hostAddress,i); theTCPsocket.close(); //判断端口的类别 switch(i){
case 21:
//对相应开放端口识别。
}
//将开放端口内容添加到显示区域,并加锁使各处同步关系。 synchronized (ThreadScan.Result) { }
ThreadScan.Result.append(" "+i);
ThreadScan.Result.append(":"+porttype+"\n");
//对相应开放端口和没有开放即连接失败的端口作记录,放入显示区。 catch (IOException e){ }
//同时也对程序加锁防止出现序。
synchronized (ThreadScan.ResultAll) { }
//将所有端口内容添加到显示区域
ThreadScan.ResultAll.append(" "+i);
ThreadScan.ResultAll.append(":Closed"+"\n");
端口扫描器的设计与实现
三、端口扫描器视图
1、工作窗口
这是用JAVA语言实现的一个简单的端口扫描器软件,主页面视图如下:
2、异常窗口
当用户操用不当,例如输入的IP地址超过255,或者端口范围大于65535时,
用户点击“开始扫描”按钮都会抛出相应的异常,并提示错误原因。如下图示例:
3、窗口核心代码
public class ThreadScan{
public static JFrame main=new JFrame("网络与信息安全课程设计·端口扫描
器·刘纪生"); public static void main(String[] args){
Submit.addActionListener(new SubmitAction());
端口扫描器的设计与实现
{ { }
}
saveButton.addActionListener(new });
main.setVisible(true);
java.awt.event.ActionListener() {
});
//实现退出功能
exitItem.addActionListener(new java.awt.event.ActionListener() //实现帮助功能
helpItem.addActionListener(new java.awt.event.ActionListener()
Stop.addActionListener(new StopAction()); Cancel.addActionListener(new CancleAction()); OK.addActionListener(new OKAction());
//实现保存功能
saveItem.addActionListener(new java.awt.event.ActionListener()
四、多线程快速扫描
1、多线程机制
在本系统中采用了多线程机制,用户可以上述工作窗口中输入所要打开
的线程数,对相端口范围进行扫描。多线程是指在一个程序中同时打开多处运行单元,各线程同时执行。大大提高了扫描的速度。
例如,假设用户填写的线程数为3,则其扫描过程如下所示
端口扫描器的设计与实现
例如,假设用户填写的线程数为1,则其扫描过程如下所示
当设置1个线程时,就好比只有一个人(一个线程)在做这件事,而但设置多个线程时,就好比是多个人分批一起做这件事。显然是多线程会处理的更快。
}
2、多线程核心代码
public class TCPThread extends Thread{ ……
public TCPThread(String name,int threadnum){
super(name);
this.threadnum = threadnum;
public static InetAddress hostAddress;
}
//运行函数
public void run() { }
//根据ip地址进行扫描 if(type == 0){ }
//按照主机名进行端口扫描 if(type == 1){ }
for (i = XXXXXX; i < XXXXXX; i += XXXXXX){ //…… }
//不同的端口循环扫描
for (i = XXXXXX; i < XXXXXX; i += XXXXXX){
theTCPsocket=new Socket(hostAddress,i); theTCPsocket.close();
}
//启动线程
for(int i=0;i<maxThread;i++){
}
new TCPThread("T" + i,i).start();
端口扫描器的设计与实现
五、用户使用方法
1、页面说明
首先在菜单中有“文件”“帮助”选项。在“文件”中设置了“保存扫描结果”和“退出”。用户可以点击“保存扫描结果”或者是Ctrl+S
,对扫描结果进
保存。也可在“帮助”菜单查看相关信息。如图
在“端口范围”用户可以输入要扫描的端口的范围,默认是0—1000,最大是65535。
在“线程数”中用户可以自定义线程数,默认是100,最大是200。之后是两种扫描方式的选择。
扫描所有窗口中会显示所有被扫描过的不有打开和打开的端口,开放端口中会显示所有扫描得到的开放端口。
2、按主机名扫描
当用户选中按主机名扫描时,需要输入将要扫描的主机名,默认是本机localhost,用户也可以自己填写相关主机。之后点击“开始扫描”。
3、按IP地址扫描
当用户选中按IP地址扫描时,需要输入将要扫描的主机的IP,默认是0.0.0.0。之后点击“开始扫描”。如果用户输入的端口范围太大,这样会导致程序扫描时间很长,这时可以点击“停止扫描”来中止扫描。
六、常用端口
系统默认会识别一部分常用端口,对常用端口系统将扫描出来,并随之打印端口功能,对未能识别的开放端口,系统将随之打印“UnknownPort:Open”。代码如下:
switch(i){
case 21:
porttype = "(FTP)"; break;
case 23:
端口扫描器的设计与实现
}
porttype = "(TELNET)"; break;
porttype = "(SMTP)"; break;
porttype = "(HTTP)"; break;
porttype = "(POP)"; break;
porttype = "(netBIOS)"; break;
porttype = "(SQL Server)"; break;
porttype = "(Terminal Service)"; break;
porttype = "(HTTPS)"; break;
porttype = "(Oracle)"; break;
porttype = "(UnknownPort:Open)"; break;
case 25:
case 80:
case 110:
case 139:
case 1433:
case 3389:
case 443:
case 1521:
default :
七、异常检测
当用户输入的数据不合法时,系统将弹出错误窗口,并提示错误原因, 相关代码:
//判断起始ip是否正确,判断条件:大于0且小于等于255
if(ip1<0 || ip1>255||ip2<0 || ip2>255||ip3<0 || ip3>255||ipstart<0 }
|| ipstart>255){
ThreadScan.DLGINFO.setText("ip地址为0-255的整数! "); ThreadScan.DLGError.setVisible(true); ThreadScan.Submit.setEnabled(true); //设置开始扫描按钮可用。 return;
端口扫描器的设计与实现
//判断主机名称的有效性
try{
TCPThread.hostAddress=InetAddress.getByName(ThreadScan.hostname.g}catch(UnknownHostException e){ }
ThreadScan.DLGINFO.setText(" 错误的域名或地址不可达! "); ThreadScan.DLGError.setVisible(true);
ThreadScan.Submit.setEnabled(true); //设置开始扫描按钮可用。 return;
etText());
//判断端口号的有效性
try{
minPort=Integer.parseInt(ThreadScan.minPort.getText()); maxPort=Integer.parseInt(ThreadScan.maxPort.getText());
maxThread=Integer.parseInt(ThreadScan.maxThread.getText()); }catch(NumberFormatException e){
ThreadScan.DLGINFO.setText("错误的端口号或线程数!端口号和线程数
必须为整数!"); ThreadScan.DLGError.setVisible(true);
}
ThreadScan.Submit.setEnabled(true); //设置开始扫描按钮可用。 return;
//判断最小端口号的有效范围:大于0且小于65535,最大端口应大于最小端口
if(minPort<0 || minPort>65535 || minPort>maxPort){
ThreadScan.DLGINFO.setText("最小端口必须是0-65535并且小于最大端
口的整数!"); ThreadScan.DLGError.setVisible(true);
}
ThreadScan.Submit.setEnabled(true); //设置开始扫描按钮可用。 return; TCPThread.MIN_port=minPort;
}else{
//判断最大端口号的有效范围:大于0且小于65535,最大端口应大于最小端口
if(maxPort<0 || maxPort>65535 || maxPort<minPort){
ThreadScan.DLGINFO.setText("最大端口必须是0-65535并且大于最小端
口的整数!");
ThreadScan.DLGError.setVisible(true);
ThreadScan.Submit.setEnabled(true); //设置开始扫描按钮可用。 return;
}else{
端口扫描器的设计与实现
}
if(maxThread<1 || maxThread>200){ }
ThreadScan.DLGINFO.setText("线程数为1-200的整数!"); ThreadScan.DLGError.setVisible(true);
ThreadScan.Submit.setEnabled(true); //设置开始扫描按钮可用。 return;
TCPThread.MAX_port=maxPort;
//判断线程数量的有效范围:大于1且小于200
结语
在这次课程设计中,我遇到了不少的困难。大多数是对程序的设计相关,当
然还是因为知识点不全,技术不成熟造成的。不过,这个过程却使我学习了不少新的知识。包括对信息安全更深层的解理。我自认为这是一次比较成功的课程设计。不过我不知道为什么,我写的程序中还一点小BUG,就是在扫描过程中如果把窗口缩下去,再拉上来可能会导致窗口布局变乱,但这也不是经常发生的,所以不学对系统造成太大影响。由于时间关系,我不想再花时间查找原因了。但是以后有空时我会在复习这个程序时把问题解决掉。
再说明一点,我的课程设计大多时间是在我自己的机器上完成的,因为每次
去机房还需要配置JAVA工作环境(本软件只有在JAVA环境下才正常运行),所以有两次我都没有去。另外,非常感谢老师对我们的辛勤指导,虽然在同学们印象中老师不是博学的教授,但老师的工作热情大家是有目共睹的,这一点得到了大多数同学的肯定。我也非常支持老师。
正在阅读:
端口扫描器的设计与实现09-04
区文化局述职述廉报告(精选多篇)09-26
《2021年安全生产工作会议记录》07-30
2016朋友工厂开业送什么好 什么样的礼物可以博得欢心 - 图文03-24
邵培仁版《传播学》教案06-22
【热门】爸爸的爱作文03-23
2022年清华大学时专业综合之材料力学考研复试核心题库04-05
我的书朋友作文500字06-17
多目标优化的求解方法01-06
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 扫描器
- 端口
- 实现
- 设计
- 基于 arm2410 的远程视频采集与传输毕业论文
- 卸料平台检查验收记录表
- 迎接疏勒县党政考察团接待方案
- 土力学论文实验室教学论文
- 【2018最新】初中家长会校长讲话稿大全-word范文 (12页)
- 优质课一等高中语文必修三《动物游戏之谜》课时作业
- 公路工程交工验收报告222
- 二级建造师继续教育-海绵城市建设工程习题及答案.
- 大五人格简版量表
- 清华大学C++程序设计 第十二章 异常处理
- 双鸭山市中考满分作文-青青河边草
- 高中数学必修+选修全部知识点精华归纳总结(新课标人教A版)
- 公路工程造价监督管理 自测 公路继续教育 答案
- 看图猜成语 答案大全
- 2018-2019年小学语文沪教版《四年级上》《第七单元》《34 白银仙境的悲哀》精选专题试卷【9】
- 最新冀教版小学二年级数学上册《倍的认识》教学设计(精品教学设计)
- 汉钟螺杆制冷压缩机说明书
- 广西烟草专卖局2012校园招聘大礼包_备战广西烟草专卖局2012校园招聘_大街网
- 2018年4月浙江省普通高校招生选考科目考试政治试题(word版 )
- 2014·高三复习数学(理)2第7章 5讲 直线、平面垂直的判定及性质