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

端口扫描程序设计与实现

课程设计报告
( 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 {
CountDownLatch latch = null;
String ip;
String ipAddress1;
String ipAddress2;
String ipAddress3;
String ipAddress41;
String ipAddress42;
System.out.print("输入起始ip地址:");
Scanner s=new Scanner(System.in);
ip=s.next();
String[] strs = ip.split("\\.");
ipAddress1= strs[0];
ipAddress2 = strs[1];
ipAddress3 = strs[2];
ipAddress41 = strs[3];
System.out.print("输入终止ip地址:"+ipAddress1+"."+ipAddress2+"."+ipAddress3+".");
ipAddress42=s.next();
int start=Integer.parseInt(ipAddress41);
int end=Integer.parseInt(ipAddress42);
System.out.print("输入起始端口:");
double startport=s.nextInt();
System.out.print("输入终止端口:");
double endport=s.nextInt();
s.close();
int th=(int) Math.ceil((endport-startport+1)/10);
System.out.println("开启"+th+"线程");
for(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).start();
}
latch.await();
}
}
}。

相关主题