精华内容
下载资源
问答
  • 【实例简介】主要用于端口扫描,用于课程设计所用,其中用socket编程,tcp技术javaJFrame框架完成【实例截图】【核心代码】5e75e205-0cf2-465a-9766-4cb219390df4└── 端口扫描器设计与实现(java)└── Duankou...

    【实例简介】

    主要用于端口扫描,用于课程设计所用,其中用socket编程,tcp技术javaJFrame框架完成

    【实例截图】

    【核心代码】

    5e75e205-0cf2-465a-9766-4cb219390df4

    └── 端口扫描器的设计与实现(java)

    └── Duankou

    ├── bin

    │   └── com

    │   └── duankou

    │   ├── CancleAction.class

    │   ├── Chuangkou.class

    │   ├── Hello.class

    │   ├── OKAction.class

    │   ├── SubmitAction.class

    │   ├── TCPThread.class

    │   ├── ThreadPort$1.class

    │   ├── ThreadPort$2.class

    │   ├── ThreadPort$3.class

    │   ├── ThreadPort$4.class

    │   ├── ThreadPort.class

    │   └── Xinxi.class

    └── src

    └── com

    └── duankou

    ├── Chuangkou.java

    ├── Hello.java

    ├── TCPThread.java

    ├── ThreadPort.java

    └── Xinxi.java

    8 directories, 17 files

    展开全文
  • 简单端口扫描器java的设计与实现.doc简单端口扫描器java的设计与实现IPScan类的实现 package scan.pratice; import .InetAddress; import .Socket; import .UnknownHostException; import java.util.ArrayList; ...

    简单端口扫描器java的设计与实现.doc

    简单端口扫描器java的设计与实现

    IPScan类的实现 package scan.pratice; import .InetAddress; import .Socket; import .UnknownHostException; import java.util.ArrayList; import java.util.ListIterator; public class IPScan { static long startTime=System.currentTimeMillis(); //获取开始时间 public static void main(String[] args) { if(args.length !=2){ System.out.println("参数不对"); } int startIP = Integer.parseInt(args[0]); //获得起始IP,因为args[]是String类型,所以要强制转换成int类型 int endIP = Integer.parseInt(args[1]); //获得终止IP,同上 ArrayList result = new ArrayList(); //ip地址扫描 for(int id=startIP;id<=endIP;id++){ String addres= "10.28.23."; try { Socket s=new Socket(addres+id,8000); //建立连接 } catch (UnknownHostException e ) { }catch(Exception e){ //System.out.println(e.toString()); if(e.toString().endsWith(".ConnectException: Connection timed out: connect")){ System.out.println(addres+id+":not exist."); }else{ } } System.out.println(addres+id+":exist."); } } } ListIterator li = result.listIterator(); //获得ArrayList的ListIterator while(li.hasNext()){ //如果li里面有元素 System.out.println(li.next().toString()); //打印出指向的元素,同时将指向下一个元素 } long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: "+(endTime-startTime)+"ms"); PortScan类的实现 package scan.pratice; import java.io.IOException; import .InetAddress; import .Socket; import .UnknownHostException; import java.util.ArrayList; import java.util.ListIterator; public class PortScan { static long startTime=System.currentTimeMillis(); //获取开始时间 public static void main(String[] args) { if(args.length !=3){ System.out.println("参数不对"); } String ip = args[0]; //获得我们指定的服务器地址 int startPort = Integer.parseInt(args[1]); //获得起始端口号,因为args[]是String类型,所以要强制转换成int类型 int endPort = Integer.parseInt(args[2]); //获得终止端口号,同上 if(startPort<1||start

    展开全文
  • 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


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

    展开全文
  • # 简单的端口扫描工具# 作者: Charles# 公众号: Charles的皮卡丘import timeimport socketimport threading# 判断是否为正确的IP地址。def isIP(ip):ip_addr = ip.split(".")if len(ip_addr) != 4:return Falsefor ...

    c90cadccf06ff6fb04b20ae3486314e8.png

    # 简单的端口扫描工具

    # 作者: Charles

    # 公众号: Charles的皮卡丘

    import time

    import socket

    import threading

    # 判断是否为正确的IP地址。

    def isIP(ip):

    ip_addr = ip.split(".")

    if len(ip_addr) != 4:

    return False

    for ipnum in ip_addr:

    if not (0 <= int(ipnum) < 255):

    return False

    else:

    return True

    # 端口扫描工具

    class scanThread(threading.Thread):

    def __init__(self, ip, port_min=0, port_max=65535):

    # 初始化。

    threading.Thread.__init__(self)

    self.port_max = port_max

    self.port_min = port_min

    self.ip = ip

    # assert isinstance(int,self.port_min) and isinstance(int,self.port_max)

    # 重写run

    def run(self):

    return self.__checker()

    # 检测

    def __checker(self):

    for port in range(self.port_min,self.port_max):

    self.__connect(port)

    # 连接

    def __connect(self,port):

    socket.setdefaulttimeout(1)

    self.sock = socket.socket()

    try:

    start_time = time.time()

    self.sock.connect((self.ip,port))

    end_time = time.time()

    connect_time = int(start_time - end_time)

    info = "Find --> [IP]: %s, [PORT]: %s, [Connect Time]: %d" % (self.ip, port, connect_time)

    print(info)

    self.__save(info)

    self.sock.close()

    except:

    # print("出错误了")

    self.sock.close()

    def __save(self,info):

    try:

    with open("results.txt", "a") as f:

    f.write(info + "

    ")

    except:

    print("写文件出现了问题")

    time.sleep(0.1)

    if __name__ == "__main__":

    # 输入IP地址。

    ip = input("Input IP(example ):

    ")

    print(isIP(ip))

    while not isIP(ip):

    ip = input("请输入正确的IP地址:

    ")

    # 输入最小端口、

    port_min = input("需要扫描的最小端口为:")

    while not (0 <= int(port_min) < 65535):

    port_min = input("请输入正确的需要扫描的最小端口:")

    port_max = input("需要扫描的最大端口为(65535):")

    while not (0 <= int(port_min) < int(port_max) < 65535):

    port_min = input("请输入正确的需要扫描的最大端口(65535):")

    num = 8

    port_max = int(port_max)

    port_min = int(port_min)

    interval = (port_max - port_min) // num

    for i in range(interval):

    scanThread(ip, i * num, (i + 1) * num).start()

    以上就是python 实现端口扫描工具的详细内容,更多关于python 端口扫描工具的资料请关注云海天教程其它相关文章!

    展开全文
  • java版端口扫描器

    2021-03-14 00:06:01
    import java.net.*;public class Scanner implements Runnable {private InetAddress IPAddress;private int Port;private Thread allportThread;public Scanner(String IPAddress, int port) ...
  • 声明:本脚本仅用于学习交流,请勿用于非法途径,造成的任何后果本人无关使用三方库.../usr/bin/python# -*- coding: UTF-8 -*-'''线程目录扫描器作者:木尤声明:本脚本仅用于学习交流,请勿用于非法途径,造成...
  • PAGE主机端口扫描程序设计摘 要计算机信息网络的发展加速了信息化时代的进程,但是随着社会网络化程度的增加,对计算机网络的依赖也越来越大,网络安全问题也日益明显。端口扫描技术是发现安全问题的重要手段之一。...
  • 简单实现C线程端口扫描核心代码(2008-11-21 23:05:00)标签:c端口扫描最近想写一个自己的端口扫描器,主要为了方便扫描“自定义”端口,上网找了一下没找到现成的代码,自己就写了个测试代码。主要实现了:对指定...
  • 参照superscan等端口扫描软件的运行情况,自行设计一个简单的端口扫描软件。能够根据TCP、IMCP等探测方法,设计程序对IP地址(单个IP,一段IP范围)、指定主机名的端口(部分端口,所有端口)进行扫描,以获得相关的...
  • 一、项目创建以及页面设计 (一)项目新建 1.选择Windows窗体项目应用(.Net Framework)->下一步: 2.项目命名以及合适的存储位置,选择创建 (二)页面设计 1.点开工具箱,需要4个Label,一个Button,一个...
  • 端口扫描器之java实现

    2021-02-12 14:09:47
    import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;.../*** 实现扫描的主体程序,TreadScan*@authorAdministrator**/public class ThreadScan {public static JFrame main = n...
  • 本文实例为大家分享了python编写简单端口扫描器的具体代码,供大家参考,具体内容如下直接放代码此代码只支持扫描域名,要扫描IP请自己修改from socket import *from threading import Threadimport optparsePort = ...
  • 端口扫描程序java实现

    2021-03-14 04:07:20
    怎么样扫描计算机系统本地和远程的端口,监测其是打开还是关闭的在很应用程序中都要用到,下面是用java实现的简单的端口扫描程序。Source Code:http://www.gaodaima.com/40985.html端口扫描程序java实现---------...
  • 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) 掌握TCP connect扫描、TCP SYN扫描、TCP FIN扫描、以及UDP扫描的基本原理、设计与实现方法。 二、实验要求 (1) 完成一个网络端口扫描程序。 ...
  • 使用 Python 编写一个端口扫描脚本,并可以通过添加参数的方式使其能实现对指定服务器地址,及指定端口/范围实现扫描。完成扫描后打印端口为开启状态的列表。例如,当我们实现对 ip 为 220.181.57.216 的地址进行...
  • 改进一下可以当一个简陋的端口扫描器使用了,扫描指定网段、指定端口,线程速度可能能好一点吧。 线程实现前几天看了个讲使用Python扫描端口的教程,看了之后自己也写了个扫描端口的脚本。记录下来,方便自己...
  • 本程序集合了8种端口扫描方式,connect,syn,fin,null,xmas,ack,udp和windows扫描。其中connect和syn的实现用到了线程池的技术。【实例截图】【核心代码】6blfae└── 端口扫描代码├── ackscan.c├── ackscan.h...
  • 文章目录一、单线程与多线程的区别二、端口扫描程序设计1. 创建项目2. 界面设计3. 单线程代码4. 多线程代码三、端口扫描程序运行效果1. 单线程2. 多线程四、参考 一、单线程与多线程的区别 单线程: 每个正在运行的...
  • 端口扫描器编写 python

    2021-03-06 21:08:57
    今天来编写一个 端口扫描器, 扫描某个主机 ,开放的端口原理对某个端口进行 socket 连接, 如果连接成功, 则代表 该端口有效,可以根据端口,判断 是 哪个服务, 很情况下,都是很准确的。80 ...
  • 端口扫描一(C语言)

    2021-05-25 04:49:11
    //编辑端口 int i=3; if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){ printf("StartUp Wrong\n"); goto error; } dest.sin_family=AF_INET; dest.sin_addr.S_un.S_addr=inet_addr(IP); for(i=0;i;i++) { CreateThread(NULL...
  • window_name def set_init_window(self): self.init_window_name.title("端口扫描工具_v1.0") self.init_window_name.geometry('1068x681+10+10') self.init_data_label = Label(self.init_window_name, text="IP...
  • SYN端口扫描器

    2021-05-06 11:18:49
    前段时间写了个简单的端口扫描器实现原理也很简单,采用了socket套接字来实现。由于socke实现的是全连接扫描,因此下面我打算采用Scapy模块的功能来实现SYN半开扫描,进一步提升端口扫描效率。 Scapy sr() sr()...
  • 运行结果三、线程实现端口扫描1. 代码准备2. 运行结果四、总结五、参考 一、项目创建 1. 创建项目 在VS2019中新建一个Windows窗体项目应用(.Net Framework): 设置项目名和路径: 创建成功 2. 界面设计 将...
  • 文档介绍:端口扫描与安全审计实验报告学院名称专业班级学号学生姓名实验日期成绩课程名称信息安全技术 B 实验题目端口扫描与安全审计一、实验目的和要求(1)端口是计算机输入/输出设备和 CPU 之间进行数据传输的通道...
  • c#验证udp协议通信及实现端口扫描器一、控制台实现udp通信二、图像界面实现发送信息3.端口扫描器实现2.单线程扫描实现多线程扫描实现4.udp数据帧分析 一、控制台实现udp通信 本次采用c/s模式创建应用实现通信。 1)...
  • C#实现端口扫描

    2021-11-24 20:04:46
    一、项目实现 ①创建项目 ②界面设计 设计如下的界面 命名 代码实现 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; ...
  • 一、项目简介1.1项目博客地址https://www.cnblogs.com/wl0724/1.2项目完成的功能特色功能:本项目采用...点击开始扫描则后端开始进行扫描端口的操作,扫描结束后的结果就会返回到下方的Scan Result之中展示给用户...
  • udp端口扫描-报告

    2021-06-07 09:38:40
    《udp端口扫描-报告》由会员分享,可在线阅读,更相关《udp端口扫描-报告(17页珍藏版)》请在人人文库网上搜索。1、网络协议分析利用UDP进行主机端口扫描专 业: 班 级: 姓 名: 学 号: 日 期: 目 录1. 任务题目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,249
精华内容 12,899
关键字:

多端口扫描器的设计与实现