java端口扫描(原创)

  项目需要扫描占用的端口来判断服务是否启动,通过查资料发现大多数方法都是ServerSocket socket = new ServerSocket(port);代码如下:

package com.frank.util;  

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;  

public class NetUtil {  

    /***
     *  true:already in using  false:not using
     * @param port
     */
    public static boolean isLoclePortUsing(int port){
        boolean flag = true;
        try {
            flag = isPortUsing("127.0.0.1", port);
        } catch (Exception e) {
        }
        return flag;
    }
    /***
     *  true:already in using  false:not using
     * @param host
     * @param port
     * @throws UnknownHostException
     */
    public static boolean isPortUsing(String host,int port) throws UnknownHostException{
        boolean flag = false;
        InetAddress theAddress = InetAddress.getByName(host);
        try {
            Socket socket = new Socket(theAddress,port);
            flag = true;
        } catch (IOException e) {  

        }
        return flag;
    }
}

  经过测试发现如果端口没有占用,此方法的时间消耗比较大,大概在1s左右,如果是循环扫描端口,无疑是无法接受的。

可以用java.net.ServerSocket包的ServerSocket代替Socket去检测端口,方法如下:

  public static boolean isPortUsing(String host,int port) throws UnknownHostException{
      boolean flag = true;
//      InetAddress theAddress = InetAddress.getByName(host);
      try {
//          Socket socket = new Socket(theAddress,port);
    	  ServerSocket socket = new ServerSocket(port);
          flag = false;
          socket.close();
      } catch (IOException e) {

      }
      return flag;
  }

  对Socket等知识研究较少,如有问题,请大家及时提出,尽快改正,谢谢!

时间: 2024-08-05 00:48:56

java端口扫描(原创)的相关文章

使用Java开发多线程端口扫描工具(二)

一 介绍 这一篇文章是紧接着上一篇文章(http://www.zifangsky.cn/2015/12/使用java开发多线程端口扫描工具/)写的,端口扫描的原理不用多少,我在上一篇文章中已经说过了,至于目的大家都懂得.在这一篇文章里,我主要是对端口扫描工具的继续完善,以及写出一个比较直观的图形界面出来,以方便我们测试使用.界面如下: 这个工具主要是实现了以下几点功能:(1)两种扫描方式,一种是只扫描常见端口,另一种是设置一个起始和结束端口,依次探测.当然,原理很简单,用for循环就可以了:(2

端口扫描器之java实现

端口扫描器之java实现 import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class TcpThread extends Thread{ //定义变量 public static InetAddress hostAddress;//主机IP地址 public static int MIN_port; //The minimal num

Android NDK学习之第一个实例---端口扫描

为什么要写一个端口扫描的程序,Java来写不是很方便吗?因为我也没有想到什么例子能够方便的来练习.于是想到以前找到的端口扫描的C代码,于是想用他们来练习.扫描服务端端口的方式有许多种,最简单的就是直接去连接该端口,复杂一些的就是看SYN的应答.其他方式就不说了.下面的portScan.c位于jni目录下:(原本可在linux下运行,修改部分代码,使之能够返回结果给Java层的调用.)#include<stdio.h> #include<stdlib.h> #include<j

多线程实现端口扫描

1 import java.net.*; 2 import java.io.*; 3 import java.awt.*; 4 import java.awt.event.*; 5 import javax.swing.*; 6 7 public class TcpThread extends Thread{ 8 9 //定义变量 10 public static InetAddress hostAddress;//主机IP地址 11 public static int MIN_port; //

企业安全建设之路:端口扫描(上)

0×00.业务需求 由于工作关系,最近一年来都奔走在各大安全会议,无论是公开会议,例如:ISC互联网大会.freebuf互联网大会等.还是半公开的会议,例如某SRC组织的互联网金融会等.互联网安全运维人员都在谈自己企业的运维平台是如何建立的.这里我简单用思维导图总结一下: 有一定研发能力的互联网安全团队都在建立自己的安全运管平台.我想这样做的目的是: (1)半自动化或者全自动化安全运维规则,提高工作效率,降低人力成本. (2)现有安全厂商提高的产品无法满足用户日益增长业务安全需求,业务架构变更.

NS3网络仿真(14): TCP连接与端口扫描

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 本节学习一下使用NS3构造一个TCP包,再利用构造好的TCP包进行最简单的TCP端口扫描. 1.    TCP协议数据报头 下图中给出了TCP协议数据报头的格式. 源端口.目的端口:16位长.标识出远端和本地的端口号. 顺序号:32位长.表明了发送的数据报的顺序. 确认号:32位长.希望收到的下一个数据报的序列号. TCP协议数据报头DE 头长:4位长.表明TCP头中包含多少个32位字. 接下来

端口扫描之王——nmap

端口扫描是网络安全工作者的必备的利器,通过对端口的扫描,了解网站中出现的漏洞以及端口的开放情况,对网站安全方面有着不可或缺的贡献,目前在市面上主要的端口扫描工具是X_Scan.SuperScan.nmap,其中在这里主推的是nmap,因为nmap具有以下的这一些优点: 1.多种多样的参数,丰富的脚本库,满足用户的个人定制需求,其中脚本库还提供了很多强大的功能任你选择 2.强大的可移植性,基本上能在所有的主流系统上运行,而且代码是开源的 3.详细的文档说明,和强大的社区团队进行支持,方面新人上手

小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相信] 一个端口就是一个潜在的通信通道,也就是一个入侵通道.对目标计算机进行端口扫描,能得到许多有用的信息.进行扫描的方法很多,可以是手工进行扫描,也可以用端口扫描软件进行扫描.在手工进行扫描时,需要熟悉各种命令.对命令执行后的输出进行分析.用扫描软件进行扫描时,许多扫描器软件都有分析数据的功能.通过

Python3实现TCP端口扫描

在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端口扫描一般分为以下几种类型: TCP connect扫描:也称为全连接扫描,这种方式直接连接到目标端口,完成了TCP三次握手的过程,这种方式扫描结果比较准确,但速度比较慢而且可轻易被目标系统检测到. TCP SYN扫描:也称为半开放扫描,这种方式将发送一个SYN包,启动一个TCP会话,并等待目标响应