端口扫描器之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 number of port    public static int MAX_port;            //The maximal number of port    private int NUM_thread;                //线程总数    public static int type;                //查询方式,0为IP方式1为主机名查询方式

    public static int ip1;//IP前三位    public static int ip2;//IP4~6位    public static int ip3;//IP7~9位    public static int ipstart;//起始IP地址最后四位    public static int ipend;//结束IP地址最后四位    public static String ipAll;//完整的IP地址

    String nameHost = "";//扫描的主机名称或IP地址    String typeport = "0";//端口类别

    /**     * 构造函数     */    public TcpThread( String name, int numthread ){        super(name);        this.NUM_thread = numthread;    }

    /**     * run()运行函数     */    public void run( ) {

        int h = 0;//IP address        int i = 0;//port number

        Socket theTcpSocket;

        //根据IP地址进行扫描        if( 0 == type ){            //IP地址循环扫描            for( h = ipstart; h <= ipend; h++){                ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;                nameHost = ipAll;

                try{                    hostAddress = InetAddress.getByName( ipAll );                }catch( UnknownHostException e){}

                //不同端口循环扫描                for( i = MIN_port; i < MAX_port + Integer.parseInt( ThreadScan.maxThread.getText() );                        i += Integer.parseInt(ThreadScan.maxThread.getText() ) ){                    try{                        theTcpSocket = new Socket(hostAddress, i);                        theTcpSocket.close();

                        ThreadScan.Result.append( nameHost +":"+i);

                        switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以                            case 21:                                typeport = "(FTP)";                                break;                            case 23:                                typeport = "(TELNET)";                                break;                            case 25:                                typeport = "SMTP";                                break;                            case 80:                                typeport = "HTTP";                                break;                            case 110:                                typeport = "POP";                                break;                            case 139:                                typeport = "netBIOS";                                break;                            case 1433:                                typeport = "SQL Server";                                break;                            case 3389:                                typeport = "Terminal Service";                                break;                            case 443:                                typeport = "HTTPS";                                break;                            case 1521:                                typeport = "Oracle";                                break;                        }

                        //端口没有特定类型                        if( typeport.equals("0")){                            ThreadScan.Result.append("\n");                        }else{                            ThreadScan.Result.append(":" + typeport + "\n");                        }                                }catch( IOException e){}                }            }            if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){                ThreadScan.Result.append("\n" + "扫描完成...");                //请"确定"按钮设置为可用                if( !ThreadScan.Submit.setEnable( true ) );            }        }

        //按主机名进行端口扫描        if( 1 == type ){            for( i = MIN_port + NUM_thread; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText());                    i += Integer.parseInt( ThreadScan.maxThread.getText( ) ) ) {                try{                    theTcpSocket = new Socket( hostAddress, i );                    theTcpSocket.close();                    ThreadScan.Result.append(" " + i);                    switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以                        case 21:                            typeport = "(FTP)";                            break;                        case 23:                            typeport = "(TELNET)";                            break;                        case 25:                            typeport = "SMTP";                            break;                        case 80:                            typeport = "HTTP";                            break;                        case 110:                            typeport = "POP";                            break;                        case 139:                            typeport = "netBIOS";                            break;                        case 1433:                            typeport = "SQL Server";                            break;                        case 3389:                            typeport = "Terminal Service";                            break;                        case 443:                            typeport = "HTTPS";                            break;                        case 1521:                            typeport = "Oracle";                            break;                    }                    if( typeport.equals("0") ){                        ThreadScan.Result.append("\n");                    }else{                        ThreadScan.Result.append(":" + typeport + "\n");                    }                }catch( IOException e){

                }            }            if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){                ThreadScan.Result.append("\n" + "扫描完成...");                if( !ThreadScan.Submit.isEnable()){                    ThreadScan.Submit.setEnabled( true );                }            }                }//End of if    }}

import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;/** * 实现扫描的主体程序,TreadScan * @author Administrator * */

public class ThreadScan {

    public static JFrame main = new JFrame("Scaner(V1.0)By Nevermore");    //注册框架类    public static JTextArea Result = new JTextArea("", 4, 40);            //显示扫描结果    public static JScrollPane resultPane = new             JScrollPane( Result, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

    public static JTextField nameHost = new JTextField("localhost", 8 );//输入主机名文本框    public static JTextField fromip1 = new JTextField("0", 3);            //输入IP地址前三位的文本框    public static JTextField fromip2 = new JTextField("0", 3);            //输入IP地址4~6位的文本框    public static JTextField fromip3 = new JTextField("0", 3);            //输入IP地址7~9位的文本框    public static JTextField fromip4 = new JTextField("0", 3);            //输入IP地址后三位的文本框

    public static JTextField toip = new JTextField("0", 3);                //输入目标IP地址后四位

    public static JTextField minPort = new JTextField("0", 4);            //最小端口输入框    public static JTextField maxPort = new JTextField("1000", 4);        //最大端口输入框

    public static JTextField maxThread = new JTextField("100", 3);        //最大线程数    public static JDialog DLGError = new JDialog(main, "错误!");        //错误提示框    public static JLabel DLGINFO = new JLabel("");    public static JLabel type = new JLabel("请选择:");    //扫描类型    public static JRadioButton radioIP = new JRadioButton("IP地址:");    public static JRadioButton radioHost = new JRadioButton("主机名:", true);    //单选按钮组    public static ButtonGroup group= new ButtonGroup();    public static JLabel p1 = new JLabel("端口范围:");    public static JLabel p2 = new JLabel("~");    public static JLabel p3 = new JLabel("~");    public static JLabel Pdot1 = new JLabel(".");    public static JLabel Pdot2 = new JLabel(".");    public static JLabel Pdot3 = new JLabel(".");    public static JLabel TNUM = new JLabel("线程数:");    public static JLabel RST = new JLabel("扫描结果:");    public static JLabel con = new JLabel("");    //定义按钮    public static JButton Ok = new JButton("确定");    public static JButton Submit = new JButton("开始扫描");    public static JButton Cancel = new JButton("退出");    public static JButton saveButton = new JButton("保存扫描结果");    //菜单栏设计:这一块好好学习学习    public static JMenuBar myBar = new JMenuBar();    public static JMenu myMenu = new JMenu("文件(F)");    public static JMenuItem saveItem = new JMenuItem("保存扫描结果(S)");    public static JMenuItem exitItem = new JMenuItem("退出(Q)");    public static JMenu myMenu2 = new JMenu("帮助");    public static JMenuItem helpItem = new JMenuItem("阅读");

    /**     * 主方法     */    public static void main( String[] argcs ){        main.setSize(500, 400);        main.setLocation(400, 400);        main.setResizable(false);        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        DLGError.setSize(300, 100);        DLGError.setLocation(400, 400);        //添加"菜单栏"        myMenu.add(saveItem);        myMenu.add(exitItem);

        myMenu2.add(helpItem);

        myBar.add(myMenu);//将菜单条目添加到菜单        myBar.add(myMenu2);

        main.setJMenuBar(myBar);//将菜单添加到框架        //设置热键        myMenu.setMnemonic(‘F‘);        saveItem.setMnemonic(‘S‘);        //为"另存为"组建设置快捷键CTRL + S        saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));        //采用表格包模式布局        Container mPanel = main.getContentPane();        GridBagConstraints c = new GridBagConstraints();        c.insets = new Insets(10, 0, 0, 10);

        c.gridx = 0;// 设置表格坐标        c.gridy = 0;        c.gridwidth = 10;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(type, c);

        group.add(radioIP);        group.add(radioHost);

        c.gridx = 0;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(radioIP, c);

        c.gridx = 1;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.CENTER;        mPanel.add(fromip1, c);

        c.gridx = 2;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        mPanel.add(Pdot1, c);

        c.gridx = 3;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(fromip2, c);

        c.gridx = 4;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(Pdot2, c);

        c.gridx = 5;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(fromip3, c);

        c.gridy = 1;        c.gridx = 6;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(Pdot3, c);

        c.gridx = 7;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(fromip4, c);

        c.gridx = 8;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(p2, c);

        c.gridx = 9;        c.gridy = 1;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(toip, c);

        c.gridx = 0;        c.gridy = 2;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(radioHost, c);

        c.gridx = 1;        c.gridy = 2;        c.gridwidth = 3;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(nameHost, c);

        c.gridx = 0;        c.gridy = 3;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(p1, c);

        c.gridx = 1;        c.gridy = 3;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(minPort, c);

        c.gridx = 2;        c.gridy = 3;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(p3, c);

        c.gridx = 3;        c.gridy = 3;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(maxPort, c);

        c.gridx = 0;        c.gridy = 4;        c.gridwidth = 1;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(TNUM, c);

        c.gridx = 1;        c.gridy = 4;        c.gridwidth = 3;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(maxThread, c);

        c.gridx = 0;        c.gridy = 5;        c.gridwidth = 3;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(Submit, c);

        c.gridx = 3;        c.gridy = 5;        c.gridwidth = 3;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(saveButton, c);

        c.gridx = 6;        c.gridy = 5;        c.gridwidth =4;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(Cancel, c);

        c.gridx = 0;        c.gridy = 6;        c.gridwidth = 10;        c.fill = GridBagConstraints.BOTH;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(RST, c);

        //设置文本域可以换行        Result.setLineWrap(true);        //设置文本域不可编辑        Result.setEditable(false);

        c.gridx = 0;        c.gridy = 7;        c.gridwidth = 10;        c.gridheight = 4;        c.fill = GridBagConstraints.VERTICAL;        c.anchor = GridBagConstraints.CENTER;        mPanel.add(resultPane, c);

        Container dPanel = DLGError.getContentPane();        dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));        dPanel.add(DLGINFO);        dPanel.add(Ok);

        Submit.addActionListener(new SubmitAction());        Cancel.addActionListener(new CancelAction());        Ok.addActionListener(new OkAction());

        //实现保存功能        saveItem.addActionListener(new java.awt.event.ActionListener(){            public void actionPerformed(java.awt.event.ActionEvent e){                JFileChooser fc = new JFileChooser();                int returnVal = fc.showSaveDialog(null);                //单击保存按钮                if( 0 == returnVal ){                    File saveFile = fc.getSelectedFile();                    try{                        FileWriter writeOut = new FileWriter( saveFile );                        writeOut.write(ThreadScan.Result.getText());                        writeOut.close();

                    }catch( IOException ex ){ System.out.println("保存失败");}                }            }        });        //实现退出功能        ActionListener li =  new java.awt.event.ActionListener(){            public void actionPerformed(java.awt.event.ActionEvent e){                System.exit(0);            }        };        exitItem.addActionListener(li);        //实现帮助功能

        ActionListener lil =  new java.awt.event.ActionListener(){            public void actionPerformed(java.awt.event.ActionEvent e){                new AboutDialog();//            }        };        helpItem.addActionListener(lil);

        ActionListener lill =  new java.awt.event.ActionListener(){            public void actionPerformed(java.awt.event.ActionEvent e){                JFileChooser fc = new JFileChooser();                int returnVal = fc.showSaveDialog(null);                //单击保存按钮                if( 0 == returnVal ){                    File saveFile = fc.getSelectedFile();                    try{                        FileWriter writeOut = new FileWriter(saveFile);                        writeOut.write(ThreadScan.Result.getText());                        writeOut.close();                    }catch(IOException ex ){ System.out.println("保存失败");}                }else{                    return;//单击取消                }

            }        };        saveButton.addActionListener(lill);        main.setVisible(true);    }}/** *  * @author Nevermore *    实现取消功能 */class CancelAction implements ActionListener{    public void actionPerformed( ActionEvent e){        System.exit(0);    }}/** *  * @author Nevermore *    实现确定按钮 */class SubmitAction implements ActionListener{    public void actionPerformed( ActionEvent a){        int minPort;        int maxPort;        int maxThread;

        int ip1 = 0;        int ip2 = 0;        int ip3 = 0;        int ipstart = 0;        int ipend = 0;

        String ipaddress = "";        String nameHost = "";        ThreadScan.Result.setText("");        if( ThreadScan.Submit.isEnabled()){            ThreadScan.Submit.setEnabled(false);        }        /**         * 判断扫描类型         * 根据IP地址扫描 type = 0         *根据主机名称扫描type = 1         */        if( ThreadScan.radioIP.isSelected()){            TcpThread.type = 0;            //判断IP地址的前三位是否是int型            try{                ip1 = Integer.parseInt(ThreadScan.fromip1.getText());            }catch( NumberFormatException e ){                ThreadScan.DLGINFO.setText("错误的IP地址");                ThreadScan.DLGError.setVisible(true);                return;            }            try{                ip2 = Integer.parseInt(ThreadScan.fromip2.getText());            }catch( NumberFormatException e ){                ThreadScan.DLGINFO.setText("错误的IP地址");                ThreadScan.DLGError.setVisible(true);                return;            }            try{                ip3 = Integer.parseInt(ThreadScan.fromip3.getText());            }catch( NumberFormatException e ){                ThreadScan.DLGINFO.setText("错误的IP地址");                ThreadScan.DLGError.setVisible(true);                return;            }            try{                ipstart = Integer.parseInt(ThreadScan.fromip4.getText());            }catch( NumberFormatException e ){                ThreadScan.DLGINFO.setText("错误的IP地址");                ThreadScan.DLGError.setVisible(true);                return;            }            try{                ipend = Integer.parseInt(ThreadScan.toip.getText());            }catch( NumberFormatException e ){                ThreadScan.DLGINFO.setText("错误的IP地址");                ThreadScan.DLGError.setVisible(true);                return;            }

            //判断是否是合理的IP地址            if(ip1 < 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||               ip3 < 0 || ip3 > 255 || ipstart < 0 || ipstart > 255 ){                ThreadScan.DLGINFO.setText("IP地址为0~255的整数");                ThreadScan.DLGError.setVisible(true);                return ;            }else{                TcpThread.ip1 = ip1;                TcpThread.ip2 = ip2;                TcpThread.ip3 = ip3;                TcpThread.ipstart = ipstart;            }            //判断目标IP地是否合理            if( ipend < 0 || ipend > 255 ){                ThreadScan.DLGINFO.setText("目标IP地址的范围是0~255");                ThreadScan.DLGError.setVisible(true);                return;            }else{                TcpThread.ipend = ipend;            }

            ipaddress = "" + ip1 + ip2 + ip3 + ipstart;

            /**             * 判断IP地址的有效性             */            try{                TcpThread.hostAddress = InetAddress.getByName(ipaddress);            }catch( UnknownHostException e){                ThreadScan.DLGINFO.setText("错误的IP或IP地址不可到达!");                ThreadScan.DLGError.setVisible(true);                return;            }

            if( ThreadScan.radioHost.isSelected()){                TcpThread.type = 1;                /**                 * 判断主机名的有效性                 */                try{                    TcpThread.hostAddress = InetAddress.getByName(ThreadScan.nameHost.getText());                }catch( UnknownHostException e){                     ThreadScan.DLGINFO.setText("错误的域名或地址不可到达!");                    ThreadScan.DLGError.setVisible(true);                    return;                }            }            /**             * 判断端口号的有效性             */            try{                minPort = Integer.parseInt(ThreadScan.minPort.getText());                maxPort = Integer.parseInt(ThreadScan.maxPort.getText());                maxThread = Integer.parseInt(ThreadScan.maxThread.getText());            }catch( NumberFormatException e ){                ThreadScan.DLGINFO.setText("错误的端口号或端口号和线程数必须为整数");                ThreadScan.DLGError.setVisible(true);                return;            }            /**             * 判断最小端口号的有效范围             * 判断条件大于0小于65535最大端口号大于最小端口号             */            if( minPort < 0 || minPort > 65535 || minPort > maxPort ){                ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");                ThreadScan.DLGError.setVisible(true);                return;            }else{                TcpThread.MIN_port = minPort;            }            /**             * 判断最大端口号的有效范围             */            if( maxPort < 0 || maxPort > 65535 || maxPort < minPort ){                ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");                ThreadScan.DLGError.setVisible(true);                return;            }else{                TcpThread.MAX_port = maxPort;            }            /**             * 判断线程数的有效范围             * 判断条件 大于1且小于200             */            if( maxThread < 1 || maxThread > 200 ){                ThreadScan.DLGINFO.setText("线程数的有效范围是1~200");                ThreadScan.DLGError.setVisible(true);                return;            }            ThreadScan.Result.append("线程数" + ThreadScan.maxThread.getText() + "\n");

            /**             * 启动线程             */            for( int i = 0; i < maxThread; i++ ){                new TcpThread("T" + i, i).start();            }        }        }}/** *  * @author Administrator *    错误对话框 */class OkAction implements ActionListener{    public void actionPerformed( ActionEvent e){        ThreadScan.DLGError.dispose();    }} 

import javax.swing.*;import java.awt.*;

public class AboutDialog extends JDialog{    JPanel JMainPane = new JPanel();    JTabbedPane jTabbedPane = new JTabbedPane();

    private JPanel JPanel1 = new JPanel();    private JPanel JPanel2 = new JPanel();

    private JTextArea jt1 = new JTextArea(6, 6);    private JTextArea jt2 = new JTextArea(6, 6);

    /**     * 构造函数     */     public AboutDialog(){         setTitle("Scaner");         setSize(300,200);         setResizable(false);         setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE);

         Container c = this.getContentPane();

         jt1.setSize(260,200);         jt2.setSize(260,200);         jt1.setEditable(false);         jt2.setEditable(false);         jt1.setLineWrap(true);         jt2.setLineWrap(true);

         jt1.setText("");         jt1.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));         jt2.setText("");         jt2.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));

         jt1.setForeground(Color.black);         jt2.setForeground(Color.black);

         JPanel1.add(jt1);         JPanel2.add(jt2);

         jTabbedPane.setSize(300,200);         jTabbedPane.addTab("扫描原理", null, JPanel1, null);         jTabbedPane.addTab("使用说明", null, JPanel2, null);         JMainPane.add(jTabbedPane);         c.add(JMainPane);         pack();         this.setVisible(true);     }}

时间: 2024-08-24 19:21:55

端口扫描器之java实现的相关文章

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

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

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; //

端口扫描之王——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会话,并等待目标响应

告别脚本小子【编写端口扫描工具】

前言Windows系统默认开放了很多端口,通常这些端口意味着该主机运行着大家都知道的服务,比如TCP端口21-FTP服务,TCP端口80-HTTP服务,有些服务就有可能存在公开的漏洞,因此可以说主机上每一个开放的端口都可能成为一条入侵的捷径.当然,网上存在很多端口扫描工具,但是我们总不能只知道使用别人的工具,一是这些工具别人编写的时候有没有加入后门,二是如果只会用别人的工具,最终也只能是一个脚本小子,所以我们自己来编写一款实用的端口扫描工具. 一.基础知识 1.1.线程 线程,有时被称为轻量级进

IP端口扫描工具

可以实现多IP,多端口扫描功能

端口扫描工具

简单的多线程端口扫描工具 可以接收IP地址作为参数,如果不接参数,则默认扫描本机的端口 1 #!/usr/bin/python 2 3 import socket 4 import time 5 import argparse 6 import threading 7 8 def arg_process(): 9 argparser=argparse.ArgumentParser(description="Port Scaner") 10 argparser.add_argument(