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

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


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

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

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

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

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会默认等待,所以我们要重新设置连接等待时长。

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

Java 端口扫描器 TCP的实现方法的更多相关文章

  1. Python3实现TCP端口扫描器

    本文来自 高海峰对 玄魂工作室 的投稿 作者:高海峰 QQ:543589796 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可 ...

  2. java编写一个端口扫描器

    好久没写java了,学的时候,也没学习网络编程这一块,无意中看到了一本书,于是小小复习一下java,写个端口扫描器,玩玩吧,网上这种小公具有的是,就是自己无聊写着玩玩. 源代码如下: 共两个类,比较简 ...

  3. 简单的端口扫描器(TCP connect)

    端口扫描器原理相对简单,采用的是TCP connect状态判断.具体来说:TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭.该方式扫描 ...

  4. perl多线程tcp端口扫描器(原创)

    perl多线程tcp端口扫描器(原创) http://bbs.chinaunix.net/thread-1457744-1-1.html perl socket 客户端发送消息 http://blog ...

  5. Python写安全小工具-TCP全连接端口扫描器

    通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器. 一个简单的端口扫描器 #!/usr/bin/python3 # -*- coding ...

  6. 3. Port scanners (端口扫描器 4个)

    3. Port scanners (端口扫描器 4个) 愤怒的IP扫描器是一个小的开源Java应用程序,它执行主机发现(“ping扫描”)和端口扫描. 旧的2.x版本只有Windows,但是,新的3. ...

  7. Java中的TCP/UDP网络通信编程

    127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户 ...

  8. 【技术分享】手把手教你使用PowerShell内置的端口扫描器

    [技术分享]手把手教你使用PowerShell内置的端口扫描器 引言 想做端口扫描,NMAP是理想的选择,但是有时候NMAP并不可用.有的时候仅仅是想看一下某个端口是否开放.在这些情况下,PowerS ...

  9. 使用python-nmap 搭建基本端口扫描器

    代码地址如下:http://www.demodashi.com/demo/13255.html 一.前言 注意: 本文相关教程仅供个人学习使用,切勿用于非法用途,否则造成的相关损失及影响,作者不承担任 ...

随机推荐

  1. 移动端flex自适应方案。(px to rem)

    define(function (require, exports, module) { exports.mobileUtilMethod = function () { (function (e, ...

  2. 于是他错误的点名开始了(trie树)

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). ...

  3. chromium之revocable_store

    // |RevocableStore| is a container of items that can be removed from the store. Revoke: 撤销 Revocable ...

  4. vue js 保留小数

    toFixed(number,fractionDigits ){ //number 保留小数数 //fractionDigits 保留小数位数 var times = Math.pow(10, fra ...

  5. Markdown基本使用

    最近在写毕业论文,打算列个提纲,觉得有条理的搜集资料规划布局很重要,用Markdown写即有利于增强我的编写接口文档能力,也便于查看. markdown编写软件很多,markdownpad不错(mar ...

  6. Java小功能大杂烩

    生成UUID: import java.util.UUID; public class ProductUUID { // 随机返回前十位的UUID public static String getUU ...

  7. laravel 增删改查 数据库设置 路由设置

    laravel 框架的路由设置: url: http://www.shanzezhao.com/laraverl/my_laravel/public/index.php/indexs laravel ...

  8. 微信小程序 嵌套循环

    前言 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for="{{items} ...

  9. JavaSE 第二次学习随笔(四)

    ---------------------------------------------------------------------------------------------------- ...

  10. 08 datetime与logging模块(进阶)

    datetime与logging模块 阶段一:日期与时间 1.datetime 模块中 主要类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象h ...