java制作的端口扫描器(附源代码)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下进行端口扫描时,3 分钟左右就可以扫描一遍所有的(65535 个)
端口,而在 windows 下,每秒钟只能扫描 1 个端口。难怪企业级服务
器最好的选择是 linux,unix!
7.程序分析与总结 本程序使用 java 语言开发,可以稳定的运行在 windows 和 linux 系统下,在 ip 扫描时由
(三)端口扫描技术: “端口” 是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”, 可以说是个“软插槽”。 “端口” 是由计算机的通信协议 TCP/IP 协议定义的。其中规定,用 IP 地址和端 口作为套接字,它代表 TCP 连接的一个连接端,一般称为 Socket。
具体来说,就是用[IP:端口]来定位一台主机中的进程。计算机就像一座大楼, 这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。
import javax.swing.*;
public class PortScannerFrame extends JFrame implements ActionListener{ JTabbedPane jtp = new JTabbedPane();//卡片布局 JPanel ipPanel = new JPanel(); JPanel portPanel = new JPanel(); JTextField ipField = new JTextField("192.168.1.100",20);
传输控制协议 TCP(Transmission Control Protocol):TCP 提供可靠的、面向连接的运输 服务,用于高可靠性数据的传输。TCP 具有完善的错误检测与恢复、顺序控制和流量控制 等功能。注重可靠性的场合一般使用 TCP 协议,例如 FTP、Telnet。
用户数据报协议 UDP(User Datagram Protocol):UDP 在传送数据之前不需要先建立连 接。远地主机的运输层在收到 UDP 数据报后,不需要给出任何确认。广泛应用于只需一次 的 C/S 模式的请求-应答查询,或者要求提供高效率数据传输的场合。注重实时性、传输率、 吞吐量的场合一般使用 UDP,如 QQ。 (久)TCP connect 扫描:
public class IPScan { Socket socket; String startIP; String endIP; ArrayList<Integer> portArray = new ArrayList<Integer>(); public IPScan(){ this.setPortArray(); } public IPScan(String startIP,String endIP,int port){ this.startIP = startIP; this.endIP = endIP; }
实验设计流程: 1. 原理概述
通过调用 socket 函数 connect()连接到目标计算机上,完成一次完整的三次握手过程。 如果端口处于侦听状态,那么 connect()就能成功返回。否则,这个端口不可用,即没有提供 服务。 2. 运行环境
本扫描软件用 java 语言开发,可稳定的运行在 linux 和 windows 环境下。 3.基本设计思路
import javax.swing.JOptionPane; import javax.swing.JTextArea;
public class PortScan { String ip; Socket socket; int port =0,endPort = 65525; public PortScan(){ this.ip = "127.0.0.1"; this.port = 8000; }
(六)扫描原理的基础知识: TCP/IP 模型四层结构 TCP 与 UDP 协议 TCP 报文结构 TCP 连接和释放过程
(七)TCP/IP 模型四层结构: (八)TCP 与 UDP 协议:
Internet 的网络通信大多是建立在这两个协议之上的,各个主机遵循着 TCP/IP 协议封装 数据包进行通信。
public String getIp() { return ip;
}Baidu Nhomakorabea
public void setIp(String ip) { this.ip = ip;
}
public int getPort() { return port;
}
public void setPort(int port) { this.port = port;
}
public synchronized void plusIP(){
String[] ipcodes = startIP.split("[.]"); int temp = Integer.parseInt(ipcodes[3]); temp ++; startIP = ipcodes[0] + "." + ipcodes[1] + "." + ipcodes[2] + "." + temp; System.out.println(startIP); }
public class Main {
/** * @param args */
public static void main(String[] args) { new PortScannerFrame();
}
} 代码 2:IPScan.java(实现网段内 ip 地址的扫描) import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.ArrayList;
端口与进程是一一对应的,入侵者通过扫描端口,便可以判断出目标计算机 有哪些通信进程正在等待连接。
(四)扫描端口的目的: 端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入
侵者暴露自己的身份和意图。 • 判断目标主机上开放了哪些服务; • 判断目标主机的操作系统。
如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够 使用相应的手段实现入侵。
this.startIP = startIP; } public String getEndIP() {
return endIP; } public void setEndIP(String endIP) {
this.endIP = endIP; } }
代码三:PortScan.java import java.io.IOException; import java.net.*;
于扫描的速度比较慢,故使用了多线程的并发机制,大大提高了运行速度。
附录 A - 源程序代码文件说明 源代码为 java 的工程,在 bin 目录下有编译好的字节码文件,可以直接运行。
附录 B - 参考文献 Java 语言程序设计 基础篇 Java 语言程序设计 进阶篇 源代码如下: 代码 1: Main.java(程序运行的入口)
实现原理:通过调用 socket 函数 connect()连接到目标计算机上,完成一次完整的三次握 手过程。如果端口处于侦听状态,那么 connect()就能成功返回。否则,这个端口不可用,即 没有提供服务。
优点:稳定可靠,不需要特殊的权限。 缺点:扫描方式不隐蔽,服务器日志会记录下大量密集的连接和错误记录 ,并容易被防 火墙发现和屏蔽。
Socket socket = new Socket(portscan.getIp(),portscan.getPort()); 根据连接结果判断指定的端口是否开放。 if(socket.isConnected()){
jta2.append(portscan.getPort() + "\n"); }
}
public int getEndPort() { return endPort;
}
public void setEndPort(int endPort) { this.endPort = endPort;
} } 代码四:PortScannerFrame.java(程序的主要窗体) import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
(五)端口的分类: 端口是一个 16 bit 的地址,用端口号进行标识不同的作用。端口一般分为两类。
• 熟知端口号(公认端口号):由因特网指派名字和号码公司 ICANN 负责 分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为 0~1023。
• 一般端口号:用来随时分配给请求通信的客户进程。
实验 5:端口扫描器的设计与实现
(一)实验目的和内容: 目的:加深对 TCP/IP 的理解,学习端口扫描技术和原理,熟悉 socket 编程。 内容:实现一个扫描器,使用 TCP connect 进行端口扫描,并对扫描结果进行 记录。
(二)课程设计要求: Windows 或 Linux 环境下,程序在单机上运行; 使用端口扫描器对一台主机进行扫描,并显示出结果; 对一个网段进行 IP 扫描,显示出结果; 编程语言不限; 提供友好的用户界面。
public Socket getSocket() { return socket;
} public void setSocket(Socket socket) {
this.socket = socket; } public String getStartIP() {
return startIP; } public void setStartIP(String startIP) {
用户界面:使用 java 里面的 swing 包来开发用户界面; 端口扫描:使用 socket 函数 connect()连接目标计算机来判定是否目标计算机开放了要 测试的端口; Ip 扫描:通过测试一些经常开放的端口,如果能连接其中一个,则该 ip 地址在该网段 内使用着,否则可以判断未使用。测试的常用端口越多,得到的结果越精确,但运行的速度 越慢。 4..功能模块设计 本软件有两个功能模块,分别是指定主机的端口扫描和指定网段的 ip 扫描.。 5.程序流程及主要算法 核心算法是 TCP 的连接函数
6.程序使用说明
在 ip 扫描面板上点击“开始”按钮进行 ip 地址的扫描,为了提高 ip 地址的扫描速度, 这里使用了多线程的并发机制,大大提高了扫描的速度。
在 port 扫描面板上点击“开始端口扫描”按钮,对输入的 ip 地址的指定端口范围进行扫 描。
在 linux 下运行:
在 linux 下运行时,有一个非常惊人的发现(相对于我来说),在 linux
public IPScan(String startIP){ this.startIP = startIP;
}
public ArrayList<Integer> getPortArray() { return portArray;
}
public void setPortArray() { portArray.add(80); //portArray.add(135); //portArray.add(443); portArray.add(445); //portArray.add(843); //portArray.add(902); //portArray.add(912); portArray.add(8080);
相关文档
最新文档