当前位置:文档之家› 端口扫描程序设计与实现

端口扫描程序设计与实现

端口扫描程序设计与实现
课程设计报告
( 2014-- 2015年度第2学期)
名称:网络综合实验
题目:端口扫描程序设计与实现
院系:计算机系
班级:网络1202
学号:
学生姓名:
指导教师:李丽芬曹锦刚刘晓峰
设计周数:2周
成绩:
日期:2015 年7 月5 日
网络综合实验
任务书
一、实验名称:端口扫描程序设计与实现
二、目的与要求
1.任务:设计并实现一个端口扫描程序,检测某个IP或某段IP的计算机的端口工作情况。

2.目的:加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,使得学生初步具有研究、设计、编制和调试网络程序的能力。

3.要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。

4.学生人数:1人。

三、主要内容
1.编写一个端口扫描程序,能够显示某个IP 或某段IP的计算机的某一个或某些端口是否正在工作。

(1) 设定好一定的端口扫描范围,并设定每个端口扫描的次数,因为有可能有的端口一次扫描可能不通;(3) 创建socket,通过socket的connect 方法来连接远程IP地址以及对应的端口;(4) 如果返回false,表示端口没有开放,否则端口开放。

四、进度计划
五、设计成果要求
1.完成规定的实验任务,保质保量;
2.完成综合实验报告,要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对实验思路的归纳和对问题解决过程的总结。

六、考核方式
1.平时成绩+验收答辩+实验报告;
2.五级分制。

学生姓名:韦笑
指导教师:李丽芬曹锦刚刘晓峰
2015 年7 月5 日
一、综合实验的目的与要求
1.目的:加深对《计算机网络体系结构》课程知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念,加深对JAVA编程语言的使用,促进编程能力的提高,同时为网络编程打下一个比较好的基础。

同时对实验的过程要有完全的了解。

2. 要求:熟悉有关定义、概念和实现算法,设计出程序流程框图和数据结构,编写出完整的源程序,基本功能完善,方便易用,操作无误。

二、综合实验正文
1、主要方法
TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。

发送方和接
收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket (通常都是server socket)等待建立连接时,另
一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

本实验在一台主机创建socket,与远程主机的某一个端口建立TCP连接,通过java中的isConnected() 函数判断连接是否建立成功,若连接建立成功,说明该端口开放;否则不开放。

2、实验流程图
3、实验优化
使用socket创建tcp连接时,若连接建立不成功,则程序抛出异常,但会有一定的时延。


了加快扫描速度,程序使用了多线程技术,每个线程扫描10个端口,并发执行所有线程。

这样就大大加快了扫描速度。

4、实验结果
三、实验总结
本实验通过建立tcp连接来扫描远程主机端口是否开放,使我们更加深入地理解了TCP/IP协议的原理,加深对课堂讲授知识的理解,熟练掌握基本的网络编程技术和方法,建立网络编程整体概念。

这次实验也锻炼了我java的编程能力,掌握了socket编程的各种函数和方法。

实验中也出现了一些问题,比如扫描远程主机端口的速度要比扫描本主机端口速度慢很多,解决方法是关闭远程主机的防火墙。

感谢老师的指导!
源代码:
package 端口扫描;
import .Socket;
import java.util.concurrent.CountDownLatch; public class test extends Thread{
private int[] p;
Socket ss = null;
CountDownLatch latch;
private String ipAddress;
private int port;
public test(int[] p,CountDownLatch latch,int port,String ipAddress) {
this.p = p;
tch=latch;
this.ipAddress=ipAddress;
this.port=port;
}
public void run() {
//System.err.println("启动线程");
for(int i=p[0]; i<p[1]&&i<=port;i++){ try {
//System.out.println(i);
ss = new Socket(ipAddress,i);
if(ss.isConnected()){System.err.println("端口" + i+"空闲");}
ss.close();
} catch (Exception e) {System.out.println("端口 " + i+"占用");}
}
latch.countDown();
//System.out.println(latch.getCount());
}
}
package 端口扫描;
import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
public class test2 {
public static void main(String[] args) throws InterruptedException {
C ountDownLatch latch = null;
S tring ip;
S tring ipAddress1;
S tring ipAddress2;
S tring ipAddress3;
S tring ipAddress41;
S tring ipAddress42;
S ystem.out.print("输入起始ip地址:");
S canner s=new Scanner(System.in);
i p=s.next();
S tring[] strs = ip.split("\\.");
i pAddress1= strs[0];
i pAddress2 = strs[1];
i pAddress3 = strs[2];
i pAddress41 = strs[3];
S ystem.out.print("输入终止ip地址:"+ipAddress1+"."+ipAddress2+"."+ipAddress3 +".");
i pAddress42=s.next();
i nt start=Integer.parseInt(ipAddress41);
i nt end=Integer.parseInt(ipAddress42);
S ystem.out.print("输入起始端口:");
d oubl
e startport=s.nextInt();
S ystem.out.print("输入终止端口:");
d oubl
e endport=s.nextInt();
s.close();
i nt th=(int) Math.ceil((endport-startport+1)/10);
S ystem.out.println("开启"+th+"线程");
f or(int num=start;num<=end;num++){
latch=new CountDownLatch(th);
String ipAddress = ipAddress1+"."+ipAddress2+"."+ipAddress3+"."+ num;
System.out.println(ipAddress+"--------------------");
for(int
i=(int)startport;i<=(int)endport;i=i+10){
new test(new int[]{i,i+10},latch,(int)endport,ipAddress).s tart();
}
latch.await();
}
}
}。

相关主题