端口扫描
一、 背景:一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行。 手动扫描的命令式telnet,而电脑上有2^32个端口,如果每一个多是这样的输入的话,我想你的手也会软了。于是,像我们这些懒人就想怎样用软件来实现端口扫描。
二、技术点:1、多线程:如果只启动一个线程的话2^32个端口需要的时间可以用小时计算,我没有全部扫完,所以结果也不知道。解决这个问题需要用到多线程原理(多线程就是同时存在N个执行体,按几条不同的执行线索共同工作的情况。程序,进程,线程,可以从不同的角度去理解。程序就是一段静态的代码,可以理解成一组计算机命令的集合。进行就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进程小的单位,一个进程再执行的过程中可以产生多个线程,每个线程也是由生产到销毁,可以理解成是进行的子集。)
2、socket中的close方法:不需要一个socket的时候应关闭它,因为socket是一种有限的系统资源。关闭socket将释放有关的资源,并允许绑定在此socket上的端口被重新使用。Socket被关闭之后就不能再向它收发数据
三、 收获:虽然只是一个小的项目,但是,让我体会了多线程的精华。
//创建扫描端口类
public class PortScanner extends JFrame {
private JTextField jtf;
private JTextField jtf1;
private JTextField jtf2;
private JTextArea jta;
// 定义显示的界面的方法
public void initUI() {
this.setTitle("端口扫描");
this.setSize(600, 400);
this.setLayout(new FlowLayout());
javax.swing.JLabel jl = new javax.swing.JLabel("IP:");
jtf = new javax.swing.JTextField(10);
javax.swing.JLabel jl1 = new javax.swing.JLabel("开始端口:");
jtf1 = new javax.swing.JTextField(5);
javax.swing.JLabel jl2 = new javax.swing.JLabel("结束端口:");
jtf2 = new javax.swing.JTextField(5);
javax.swing.JButton jbt = new javax.swing.JButton("开始扫描");
jta = new javax.swing.JTextArea(20, 30);
javax.swing.JScrollPane jsp=new JScrollPane(jta);
jsp.setPreferredSize(new Dimension(300,300));
this.add(jl);
this.add(jtf);
this.add(jl1);
this.add(jtf1);
this.add(jl2);
this.add(jtf2);
this.add(jbt);
this.add(jsp);
// 创建监听
jbt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
if ("开始扫描".equals(e.getActionCommand())) {
jta.append("开始扫描");
action();
}
}
});
// this.add(jta);
this.setDefaultCloseOperation(3);
this.setVisible(true);
}
/**
* 启动线程的方法
*/
public void action() {
String IP = jtf.getText();
int StarPort = Integer.parseInt(jtf1.getText());
int EndPort = Integer.parseInt(jtf2.getText());
int i = EndPort - StarPort;
//循环启动线程
for (int j = 0; j <= 10; j++) {
ScannerThread st1 = new ScannerThread(IP, j * (i / 10)+StarPort, (j + 1) * (i
/ 10)+StarPort, jta);
st1.start();
System.out.println(j);
}
ScannerThread st = new ScannerThread(IP, EndPort - (EndPort - StarPort)
% 10, EndPort, jta);
st.start();
}
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
PortScanner ps = new PortScanner();
ps.initUI();
}
}
package cn.netjava.portScanner;
import java.net.Socket;
import javax.swing.JTextArea;
//扫描线程类
public class ScannerThread extends Thread {
private int StarPort, EndPort;
private String IP;
private JTextArea jta;
public ScannerThread(String IP, int StarPort, int EndPort, JTextArea jta) {
this.IP = IP;
this.StarPort = StarPort;
this.EndPort = EndPort;
this.jta = jta;
}
public void run() {
for (int i =StarPort ; i <= EndPort; i++) {
try {
java.net.Socket server = new Socket(IP, i);
jta.append(i + "开放的端口:\n");
server.close();
server=null;
} catch (Exception ef) {
System.out.println("关闭的端口" + i);
}
}
}
}
分享到:
相关推荐
自己制作的JAVA制作的多线程的可用端口扫描。运用了java的swing组件,利用多线程加快扫描速度。功能:获得本地IP,扫描可用端口。 含有两个文件,(main)主类文件,线程类文件。
这是我写端口扫描器的所有Demo包括测试 是基于.NET C#代码 是这个扫描器出来的全部过程 包括在控制台下还是窗体下的全部都有 还有一些类的测试经过等 运用 泛型、多线程、还有自己写的ip累加类、委托、等
多线程和异步技术的运用使程序具有极快的运行速度和极多的功能:针对任意IP地址范围(或从IP地址列表文件读取)的ping和端口扫描; 扫描任意端口(从内建列表或自定义范围); 解析和反向解析任意IP地址或范围; ...
3.4.3 创建多线程 140 3.4.4 定时器与DoEvents() 151 常识问答 154 本章习题 154 第4章 串行通信中的字符与字节 155 4.1 字符与字节 155 4.1.1 字符和字节的差别 155 4.1.2 Visual Basic .NET中的 字符串类型...
实例三 端口扫描程序 实例四 网页更新检查程序 实例五 sniffer的基本实现 实例六 ip包检查程序 实例七 ip欺骗实例 实例八 路由测试程序 实例九 linux防火墙的编写 实例十 守护进程 实例十一 普通文件传输协议(tftp)...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程...
第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 模拟淘宝...
实例119 在指定的目录下创建多个临时文件 158 实例120 删除指定目录下的文件 160 实例121 移动指定目录下的文件 163 实例122 文件搜索引挚 167 7.2 字节流 169 实例123 复制指定目录下的文件 ...
第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 模拟淘宝...
第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 ...
Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
5.5 接口和端口 58 5.5.1 可见性 58 5.5.2 作用域 59 5.6 小结 59 5.7 常见问题解答 60 5.8 小测验和习题 60 5.8.1 小测验 60 5.8.2 习题 60 第6章 介绍用例 61 6.1 什么是用例 61 6.2 用例的重要性 62 6.3 举例:...
Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...
Junction: 创建 NTFS卷上的符号链接(类似Linux的符号链接,灵活运用的话相当实用) LDMDump: 可以转储 Logical Disk Manager 在磁盘中的数据库.(LDMDump) ListDLLs: 列出当前载入的所有 DLLs 及他们的位置和版本...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...