精华内容
下载资源
问答
  • NULL 博文链接:https://zhaoningbo.iteye.com/blog/1071353
  • java端口扫描

    2019-01-09 14:03:43
    java端口扫描器。 本人毕业设计。使用javaGUI编程,采用TCP connect原理进行端口扫描,可以保存扫描结果,暂停扫描扫描结果可以清楚查看所对应的端口是什么协议 GUI java。
  • public static JFrame main=new JFrame("JAVA端口扫描器"); //显示扫描结果 public static JTextArea Result=new JTextArea("",4,40); //滚动条面板 public static JScrollPane resultPane = new JScrollPane...
  • Java端口扫描

    2012-06-01 15:38:26
    Java端口扫描,设计,编写可以针对目标计算机端口扫描编程,性质支持多线程并发扫描
  • java端口扫描(原创)

    2021-03-07 07:46:08
    项目需要扫描占用的端口来判断服务是否启动,通过查资料发现大多数方法都是ServerSocket socket = new ServerSocket(port);代码如下:package com.frank.util;import java.io.IOException;import java.net....

    项目需要扫描占用的端口来判断服务是否启动,通过查资料发现大多数方法都是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等知识研究较少,如有问题,请大家及时提出,尽快改正,谢谢!

    展开全文
  • 设计题目 端口扫描器的设计与实现(Java) ★★ 已知技术参数和设计要求 1.利用Socket通信机制实现一个多线程的端口扫描器。 2.设计要求: 2.1用户界面:用户可以输入IP地址或IP地址段;输入端口号或端口号...
  • java端口扫描.zip

    2021-12-24 10:36:24
    端口扫描小工具,适用于TCP端口扫描,并附带有多线程扫描功能
  • Java开发端口扫描

    2016-10-29 13:00:04
    Java开发实例
  • Java多线程端口扫描课设任务简单报告,多线程端口扫描器是实现计算机的端口扫描,只要前台设计好了要扫描的IP或主机、起始端口、结束端口及所要用到的线程数,点击扫描,就可以扫描到相应IP或主机的端口,并显示在...
  • java 端口扫描程序报告 完整版 包括步骤 实验环境 目录 一、设计要求 2 二、开发环境与工具 2 三、设计原理 2 四、系统功能描述及软件模块划分 2 五、设计步骤 2 六、运行结果 8 七、软件使用说明 9
  • 端口扫描主要是扫描其TCP端口。因为他有三次握手,握上了,如果有加密才进行传输层的加密。 写个程序,去连接那个端口,能握手,就说明端口是开着的。 关于UDP的端口扫描,有但意义不是很大,因为udp不会面向...

    端口扫描主要是扫描其TCP端口。因为他有三次握手,握上了,如果有加密才进行传输层的加密。

    写个程序,去连接那个端口,能握手,就说明端口是开着的。

     

    关于UDP的端口扫描,有但意义不是很大,因为udp不会面向连接的。主要看服务端会不会回包,以及使用了什么协议如DTLS,如果服务端写成,客户端发送过来的数据异常,就回个异常的,这样就能扫描到,如果没写成这样,那就没办法了。

     

    Java代码如下:

    public class PortScanJava {
    
        public boolean isPortOpen(String address, Integer port){
    
            boolean ret = false;
            try{
    
                Socket socket = new Socket();
                socket.bind(new InetSocketAddress(8888));
                socket.connect(new InetSocketAddress(address, port), 1000);
                socket.close();
                ret = true;
            }
            catch (Exception e){
    
                e.printStackTrace();
            }
    
            return ret;
        }
    }
    

    这里把端口固定为8888是为了抓包的方便。

    调用如下:

    boolean portOpen = portScanComponent.isPortOpen("www.baidu.com", 80);
    System.out.println(portOpen);

    程序运行截图如下:

    抓到的包是这样的:

    端口状态是这样的:

    这样就有点问题了,可见他的四次分手,客户端只发出FIN包,就没有下文了,服务端没有发送ACK,让其进入FIN_WAIT2状态,并且握手的时候

    这里再此出深究是哪个的问题了。先来看下TCP三次握手,当TCB把TCP都建立起来后,客户端发送标志位为SYN的包给服务端,服务端接收到后会回SYN和ACK的包,这里不知道是什么原因没有抓到,可能是我过滤得有问题,但是可以肯定,客户端一定是收到了,不然客户端不会会ACK的包给服务端,分手就是发FIN。

    这里来看下完整的流程:

    用的是QNetworkAccessManager,后端是用SpringBoot搭建的。可见其完整的流程。

    展开全文
  • java端口扫描程序

    2013-06-06 12:04:32
    java端口扫描程序 java端口扫描程序 输入线程数 ip地址 端口范围 开始扫描
  • Java端口扫描

    2019-03-20 01:05:02
    源码下载: 博文链接:https://champion-netjava-163-com.iteye.com/blog/760627
  • 简单的Java 实现IP端口扫描器,能运行
  • 主要用于端口扫描,用于课程设计所用,其中用socket编程,tcp技术javaJFrame框架完成
  • 简单的端口扫描工具 有源代码 让大家学习参考
  • Java实现端口扫描

    千次阅读 2021-11-09 08:52:48
    通过Java实现一个端口扫描器 原理介绍 端口扫描顾名思义,就是扫描目的资源的端口,来发现目的资源是否对外开放某个端口,提供了某种网络服务。 在安全攻防领域经常通过端口扫描技术来发现关键资产对外提供服务的...

    通过Java实现一个端口扫描器

    一、原理介绍

    端口扫描顾名思义,就是扫描目的资源的端口,来发现目的资源是否对外开放某个端口,提供了某种网络服务。
    在安全攻防领域经常通过端口扫描技术来发现关键资产对外提供服务的情况。红军为发现暴露的风险点,进行安全加固;蓝军为识别目标服务,以便识别资产的脆弱点,实施针对性网络攻击。
    

    二、实现

    功能介绍

    • 对指定ip进行指定端口进行扫描,获取目的ip的端口开放情况
    • 扫描模式:TCP全连接扫描、TCP半连接扫描(待实现)
    • 通过发送空信息,获取开放端口对应服务的应答,获取指纹信息,从而判断服务类别
    • 端口开放情况会通过日志打印出来

    输入

    • ip地址或ip地址组,用逗号隔开
    • 待扫描的端口组:0-65535,左开右闭

    输出

    • 通过日志打印端口开放情况

    类说明

    • ScanApp 扫描器启动类
    /**
     * 扫描器启动类
     */
    public class ScanApp {
        public static void main(String[] args) {
            // 待扫描的ip地址或ip地址组
            String ips = null;
            ips = "14.29.192.196,14.116.188.121";
            // 待扫描的port范围
            String ports = "20-25";
            Scanner.start(ips,ports);
    
    
        }
    }
    
    
    • Scanner 扫描管理类
    import java.util.concurrent.Executors;
    import java.util.concurrent.LinkedBlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    import java.util.logging.Logger;
    
    /**
     * 端口、指纹扫描器
     * 职责:
     * 1、解析输入的ip地址、端口
     * 2、新键扫描任务ScanJob扫描引擎进行端口扫描
     * 3、两种扫描方式:TCP全连接扫描、TCP半连接扫描
     *
     */
    public class Scanner {
        // 日志
        private static Logger logger = Logger.getLogger("Scanner");
        // 使用多线程扫描
        private static ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10,20,1000,
                TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(5),
                Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
    
        /**
         * 开始方法
         * @param ips 输入的待扫描ip列表
         * @param ports 输入的待扫描端口
         */
        public static void start(String ips, String ports) {
            // 解析端口
            String[] portArray = ports.split("-");
            int portStart = Integer.parseInt(portArray[0]);
            int portEnd = Integer.parseInt(portArray[1]);
            logger.info("[-] Ports: " + ports);
            // 解析ip地址,并扫描
            if (ips.indexOf(',') != -1) {
                String[] ipList = ips.split(",");
                logger.info("[-] IP list: " + ipList.toString());
                for (String ip : ipList) {
                    scanAllPort(ip,portStart,portEnd);
                }
            }else if (ips.indexOf('/') != -1){
                // TODO 支持ip地址网段的解析
                String[] ipArray = ips.split("/");
                String ipAddress = ipArray[0];
                int mask = Integer.parseInt(ipArray[1]);
                String[] ipSplit = ipAddress.split(".");
    
            }else {
                scanAllPort(ips,portStart,portEnd);
            }
            // 扫描任务都完成后,程序停止
            try{
                while(true){
                    if(poolExecutor.getActiveCount() == 0){
                        logger.info("[-] Scan job all finish");
                        System.exit(-1);
                        break;
                    }
                    Thread.sleep(1000);
                }
            }catch (Exception ex){
                logger.warning("End with exeception, ex: " + ex.getMessage());
            }
            System.exit(-1);
    
    
    
    
    
        }
    
        /**
         * 扫描某ip的对应端口
         * @param ip ip地址
         * @param portStart 开始扫描的的端口
         * @param portEnd 停止扫描的端口
         */
        public static void scanAllPort(String ip, int portStart, int portEnd){
            for (int port = portStart; port <= portEnd; port++){
                scan(ip,port);
            }
        }
    
        /**
         * 对ip:port进行扫描
         * @param ip ip地址
         * @param port 端口
         */
        public static void scan(String ip, int port){
            // 执行扫描任务
            poolExecutor.execute(new ScanJob(new ScanObject(ip,port),ScanEngine.TCP_FULL_CONNECT_SCAN));
        }
    }
    
    • ScanEngine 扫描器引擎
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ConnectException;
    import java.net.Socket;
    import java.util.logging.Logger;
    
    /**
     * 扫描器引擎
     * 实现具体的扫描逻辑,提供扫描能力(TCP全连接和半连接扫描)
     */
    public class ScanEngine {
        private static Logger logger = Logger.getLogger("TCPFullConnectScan");
        public static final String TCP_FULL_CONNECT_SCAN = "TCP_FULL_CONNECT_SCAN";
        public static final String TCP_HALF_CONNECT_SCAN = "TCP_HALF_CONNECT_SCAN";
    
        public static ScanObject scan(ScanObject object, String scanEngine){
            switch (scanEngine){
                case TCP_FULL_CONNECT_SCAN:
                    return tcpFullConnectScan(object);
                case TCP_HALF_CONNECT_SCAN:
                    return tcpHalfConnectScan(object);
            }
            return tcpFullConnectScan(object);
        }
    
        /**
         * tcp全连接扫描
         * @param object
         * @return
         */
        private static ScanObject tcpFullConnectScan(ScanObject object){
            try{
                // 全连接扫描,发现可用服务
                Socket socket = new Socket(object.getIp(),object.getPort());
                object.setOpen(true);
                object.setService();
                // 发送招手信息
                OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream());
                out.write("hello");
                out.flush();
                // 获取服务指纹
                BufferedReader re = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String serviceBanner = re.readLine();
                object.setBanner(serviceBanner);
                object.setService();
                logger.info("[-] Find service :"+ object);
                socket.close();
            } catch (ConnectException e) {
                // 打印连接失败的端口
    //            logger.info("[-] Close: " + object.getIp() + ":" + object.getPort());
    
            } catch (Exception e){
                // 出现其他异常
                logger.info("[-] " + object.toString() + "end with unexecepted exeception:" + e.getMessage());
            }
            return object;
    
        }
    
        /**
         * TPC 半连接扫描
         * @param object
         * @return
         */
        private static ScanObject tcpHalfConnectScan(ScanObject object){
            // TODO 待实现tcp半连接扫描
            return object;
        }
    }
    
    
    • ScanJob 扫描任务类
    /**
     * 扫描任务类,执行具体的扫描任务
     */
    public class ScanJob implements Runnable{
        // 扫描信息
        private ScanObject object;
        // 扫描类型
        private String scanType;
    
        public ScanJob(ScanObject object,String scanType) {
            this.object = object;
            this.scanType = scanType;
    
        }
    
        @Override
        public void run() {
            ScanEngine.scan(object, scanType);
        }
    }
    
    
    • ScanObject 扫描结果实体类
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 扫描信息实体
     */
    public class ScanObject {
         private String ip;
         private int port;
         private String service;
         private Boolean isOpen;
         private String banner;
         // 存放服务指纹和服务的对应关系 banner -> service
         private static Map<String,String> bannerMaps = new HashMap<>();
         // 存放常见端口与服务的对应关系 port -> service
         private static Map<Integer,String> portMaps = new HashMap<>();
    
         static {
             bannerMaps.put("ssh","SSH");
             portMaps.put(22,"SSH");
             bannerMaps.put("ftp","FTP");
             portMaps.put(21,"FTP");
             portMaps.put(20,"FTP");
             bannerMaps.put("smtp","SMTP");
             portMaps.put(25,"SMTP");
             bannerMaps.put("mysql","MySQL");
             portMaps.put(3389,"MySQL");
         }
    
        public ScanObject(String ip, int port) {
            this.ip = ip;
            this.port = port;
        }
    
        public Boolean getOpen() {
            return isOpen;
        }
    
        public void setOpen(Boolean open) {
            isOpen = open;
        }
    
        public String getIp() {
            return ip;
        }
    
        public void setIp(String ip) {
            this.ip = ip;
        }
    
        public int getPort() {
            return port;
        }
    
        public void setPort(int port) {
            this.port = port;
        }
    
        public String getService() {
            return service;
        }
    
        public void setService() {
             // 先根据port判断服务类型
            if (portMaps.containsKey(this.port)){
                this.service = portMaps.get(this.port);
            }
            if (banner != null && !banner.equals("")){
                for (String key : bannerMaps.keySet()) {
                  if (banner.toLowerCase().contains(key)) {
                      this.service = bannerMaps.get(key);
                      break;
                  }
                }
            }
        }
    
        public String getBanner() {
            return banner;
        }
    
        public void setBanner(String banner) {
            this.banner = banner;
    
        }
    
        @Override
        public String toString() {
            return "ScanObject{" +
                    "ip='" + ip + '\'' +
                    ", port=" + port +
                    ", service='" + service + '\'' +
                    ", isOpen=" + isOpen +
                    ", banner='" + banner + '\'' +
                    '}';
        }
    }
    
    

    使用方式

    • 在ScanApp中的ips字符串中加入待扫描的ip地址(逗号隔开),在ports中输入扫描的端口范围(减号隔开)
    • 使用jdk8运行ScanApp

    项目源码链接:

    https://github.com/aa792978017/Scanner


    如果这篇文章对你有帮助,欢迎点赞收藏;如果对文章有任何疑问,也欢迎留言提出,笔者会尽快回复。

    展开全文
  • java端口扫描器,简单

    2008-12-12 10:25:46
    java端口扫描器,简单易懂,大家来看看1
  • Java端口扫描程序

    2013-11-29 13:45:21
    Java端口扫描程序,米特分享,实现tcp端口扫描。
  • java 端口扫描源代码 30个 汇总 java 端口扫描源代码 30个 汇总
  • Java局域网IP端口扫描

    2015-02-06 10:11:19
    Java写的一个小巧程序,局域网内,扫描开放指定端口的主机
  • 计算机网络课程设计——端口扫描器的实现 1.利用Socket通信机制实现一个多线程的端口扫描器。 2.设计要求: 2.1用户界面:用户可以输入IP地址或IP地址段;输入端口号或端口号范围;列表显示主机名、开放的端口及...
  • Java端口扫描器.课程设计 Java端口扫描器.课程设计 Java端口扫描器.课程设计 Java端口扫描器.课程设计 Java端口扫描器.课程设计
  • java 端口扫描源代码

    2009-03-25 19:44:21
    java端口扫描源代码, 源码 图片一应具全 初学之可以看看。
  • 端口扫描程序java实现

    2021-03-14 04:07:20
    怎么样扫描计算机系统本地和远程的端口,监测其是打开还是关闭的在很多应用程序中都要用到,下面是用java实现的简单的端口扫描程序。Source Code:http://www.gaodaima.com/40985.html端口扫描程序java实现---------...

    怎么样扫描计算机系统本地和远程的端口,监测其是打开还是关闭的在很多应用程序中都要用到,下面是用java实现的简单的端口扫描程序。

    Source Code:

    http://www.gaodaima.com/40985.html端口扫描程序java实现

    --------------------------------------------------------------------------------

    /*

    * Created on 2005-3-22

    *

    * TODO To change the template for this generated file go to

    * Window - Preferences - Java - Code Style - Code Templates

    */

    /**

    * @author whandey connect to me: whandey@163.com

    *

    * TODO To change the template for this generated type comment go to

    * Window - Preferences - Java - Code Style - Code Templates

    */

    import java.io.*;

    import java.net.*;

    import java.util.*;

    public class socketPort {

    public static void main(String[] args) {

    String ip = "159.162.39.27";

    String hostname = new String();

    try{ //get the target ip address and hostname

    InetAddress address = InetAddress.getByName(ip);

    System.out.println(address);

    hostname = address.getHostName();

    System.out.println(hostname);

    }

    catch(UnknownHostException e)

    {

    System.out.println("Could not find "+ ip);

    }

    try

    { // creat the output file

    PrintWriter fout = new PrintWriter( new FileWriter("PortInf.txt"));

    fout.println("Information Of The Port On the " + hostname +"computer ");

    fout.println();

    // do ports scan

    for(int nport = 25;nport < 30;++nport)

    {

    try

    {

    Socket s = new Socket(hostname,nport);

    fout.println("The port " + nport + " is open!");

    fout.println("Connected to "+ s.getInetAddress() + " on port " + s.getPort() + " from port "+ s.getLocalPort() + " of " + s.getLocalAddress());

    //print the connected socket information

    }

    catch(IOException e)

    {

    fout.println("The port " + nport + " is closed!");

    }

    }

    fout.close();

    }

    catch(IOException e){}

    }

    }

    欢迎大家阅读《端口扫描程序java实现》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

    原创文章,转载请注明: 转载自搞代码

    e7ce419cf2d6ad34d01da2ceb8829eed.png

    微信 赏一包辣条吧~

    023a57327877fb4402bcc76911ec18ea.png

    支付宝 赏一听可乐吧~

    展开全文
  • java 实现的端口扫描器import java.net.*;import java.io.*;public class PortScanner {public static void main(String args[]){String host="localhost";new PortScanner().scan(host);}public void scan(String ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,908
精华内容 20,363
关键字:

java端口扫描

java 订阅