Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 端口扫描器 TCP的实现方法

Java 端口扫描器 TCP的实现方法

作者头像
Rekent
发布于 2018-09-04 07:36:32
发布于 2018-09-04 07:36:32
2.2K00
代码可运行
举报
文章被收录于专栏:日常分享日常分享
运行总次数:0
代码可运行

想必很多朋友都实现过一个简易的聊天室这个功能,其中涉及到Socket套接字这个类,我们通过一个特定的IP以及特定的端口创建一个服务端的套接字(ServerSocket),以此我们聊天个体的套接字(Socket)再与其连接,从而实现连通并通过流来传递信息的聊天室功能。

而端口扫描器所用的知识体系也是基于Socket,相当于我们已经有一个 服务器端的套接字,我们去查看其是否能够连通,即可。


按照上面的思路,我们可能已经有了一个大体的思路:

我们通过建立一个Socket来连接一个要扫描的IP以及PORT,只建立连接不传递数据。

再通过捕捉IOException来检测是否连接成功。

所以大家很快就会有一串如下的实现代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static public String ScannerPortisAlive(int port,String HostIP){
        String result="OPEN";       
        try{
            Socket testPortSocket = new Socket(HostIP, port);
            testPortSocket.close();
        }catch (IOException e) {
            result = "CLOSE";
        }
        return result;
    }

但是在我实际测试情况来看,这段代码的执行效率非常低下,问题出在哪里呢? 原来,当端口不通时,Socket会默认等待,所以我们要重新设置连接等待时长。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static public String ScannerPortisAlive(int port){
        String result="OPEN";
        Socket socket=null;
        try{
            socket=new Socket();
            InetAddress ip=InetAddress.getLocalHost();
            SocketAddress address=new InetSocketAddress(ip, port);
            socket.connect(address,100);
            socket.close();
//            Socket testPortSocket = new Socket(HostIP, port);
//            testPortSocket.close();
        }catch (IOException e) {
            result = "CLOSE";
        }
        return result;
    }

除此之外,我们只需要再开一个线程池来处理要处理的端口就可以啦。

笔者实现了一个简单的可用的桌面端口扫瞄器,大家可以用作参考:

Jar可执行程序:https://files.cnblogs.com/files/rekent/Port_Scanner_jar.zip

Source Code:https://files.cnblogs.com/files/rekent/Port_Scanner.zip

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java从入门到精通十三(java网络编程)
前言:不在本文中详细说明网络通信(具体的准备有时间开一个网络专栏,具体按照Cisco Packet进行实验模拟说明。)
兰舟千帆
2022/07/16
2K0
Java从入门到精通十三(java网络编程)
《Java-SE-第三十一章》之网络编程
&ebsp;&ebsp;当我们使用浏览器进行搜索时,浏览器会根据关键字搜索出视频,图片文本等资源,这些资源都属于网络资源。网络资源相比于本地资源来说更加的丰富多彩。而这些网络资源都需要通过网络编程来进行数据传输。
用户10517932
2023/10/07
3330
《Java-SE-第三十一章》之网络编程
JAVASocket实现聊天室「建议收藏」
socket本质上是两个端点之间的通信桥梁,两个端点相互连接,并且打开远程之间的网络IO,从而可以像对本地文件读写一样,JAVA对socket编程有着友好的支持,并且针对客户端和服务端抽象了不同的服务对象
全栈程序员站长
2022/07/02
3220
JAVASocket实现聊天室「建议收藏」
Java TCP通信概念及实例
              <1>TCP:类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听。
Rekent
2018/09/04
8390
Java TCP通信概念及实例
初学者第71节网络编程-Socket(二)
java.net.Socket 类代表客户端和服务器都用来互相沟通的套接字。客户端要获取一个 Socket 对象通过实例化 ,而 服务器获得一个 Socket 对象则通过 accept() 方法的返回值。
用户5224393
2019/08/20
6550
【JavaEE初阶】网络编程
网络资源,其实就是在网络中可以获取的各种数据资源。 而所有的网络资源,都是通过网络编程来进行数据传输的。
xxxflower
2023/10/16
2890
【JavaEE初阶】网络编程
第62节:探索Java中的网络编程技术
网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考.
达达前端
2019/07/03
4000
第62节:探索Java中的网络编程技术
JAVA网络编程TCP通信
Socket称为“套接字”,描述IP地址和端口。在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务。Socket和ServerSocket类位于java.net包中。ServerSocket用于服务端,Socket是建立网络连接时使用的。连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话。
HUC思梦
2020/09/03
9580
JAVA网络编程TCP通信
JAVA网络编程
一、osi网络7层架构 ip:网络唯一标识。(internet protocol address)网络互联协议地址。分为网络地址和主机地址。 port:端口号,每一个网络应用程序都需要一个以上的端口号。(1-65535)。1000以内的不要用。 osi7层架构
张哥编程
2024/12/13
1330
II 3.1 连接到服务器
II 3.1 连接到服务器 package socket; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.util.Scanner; public class SocketTest { public static void main(String[] args) throws IOException { try(Socket s = new Socket(
Mister24
2018/05/14
1.5K0
「网络基础」网络套接字、端口、IP、协议、TCP与UDP,一样都没少
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为网络套接字,用于标识客户端请求的服务器和服务;应用程序可以通过套接字打开、读写、关闭数据,允许应用程序在网络中加入I\O,与网络中的其他应用程序进行通信。
老夫编程说
2020/04/25
3.1K0
「网络基础」网络套接字、端口、IP、协议、TCP与UDP,一样都没少
Java 网络编程入门与实战:Socket、ServerSocket 全解析
在现代软件开发中,客户端与服务器之间的通信是常见需求。无论是浏览器访问网页,还是移动端请求后端服务,都离不开网络编程。
用户11690571
2025/06/11
1730
网络编程
由4段8位的二进制组成的,因为读写不方便所一转换成了10进制,取值范围是1-255
xiaozhangStu
2023/05/04
4210
Netty实战专栏 | Java网络编程深入解析
大家好,我是Leo哥🫣🫣🫣,本次专栏学习Java并发以及netty应用的深度学习,netty提供了异步、事件驱动、非阻塞的网络编程模型,能够轻松处理高并发、高吞吐量的网络通信场景。是一个基于Java NIO(Non-blocking I/O) 的高性能网络应用框架。但是在此之前我们需要对我们Java前置知识进行一些巩固和复习。那就是IO,Java网络编程,BIO,NIO,AIO相关知识点,前置知识是还是挺多,只有打好前面的基础我们才能更深入理解netty这个框架以及他的底层原理。对于IO相关的知识,大家可以看我之前写的这篇。本篇主要讲解和回顾Java网络编程的相关知识点。好了,话不多说让我们开始吧😎😎😎。
程序员Leo
2023/11/16
7750
Netty实战专栏 | Java网络编程深入解析
使用DatagramSocket发送、接收数据(Socket之UDP套接字)
Java使用DatagramSocket代表UDP协议的Socket,DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成的。
全栈程序员站长
2022/07/01
3K0
【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程
Socket 套接字,是由系统提供用于网络通信的技术,是基于 TCP/IP 协议的网络通信的基本操作单元。基于Socket 套接字的网络程序开发就是网络编程。
小皮侠
2024/10/27
4160
【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程
Socket编程
Java中的java.net包提供了网络通信的各种实现,如果我们要使两台计算机间通过网络来交换数据,那么中间就需要有连接才可进行,而net包中Socket对象就担任连接这个的角色,net包提供了两种常见的网络协议支持:
晚上没宵夜
2020/10/28
9850
Python端口扫描
在这个例子中,我们首先指定要扫描的主机IP,以及要扫描的端口范围。然后,我们创建一个TCP套接字对象,并使用socket.connect_ex()函数来连接每个端口。如果端口是开放的,connect_ex()函数会返回0,否则会返回一个错误码。最后,我们根据返回值来判断端口是否开放。
用户8658949
2023/03/04
1.2K0
网络编程基础
在学习Java基础的时候,有一章节就叫《网络编程》,那么何为网络编程呢?在此之前先了解一下何为计算机网络。
贪挽懒月
2019/03/04
6810
Socket套接字(网络编程万字总结-附代码)
传输层、网络层、数据链路层、物理层 都是通过OS+硬件来提供服务的,而应用层要享受OS提供的网络服务,需要通过OS提供的服务窗口(Socket)来享受服务。
VIBE
2022/12/30
8400
Socket套接字(网络编程万字总结-附代码)
相关推荐
Java从入门到精通十三(java网络编程)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档