内网穿刺私人电脑实现公网TCP聊天

内网穿刺私人电脑实现公网TCP聊天

  • 一、推荐www.natfrp.com
  • 二、私人电脑内网穿刺
  • 三、搭建JAVA服务器
  • 四、互联

一、推荐www.natfrp.com

打开www.natfrp.com

二、私人电脑内网穿刺

注册完成后点击首页-服务-隧道列表
在这里插入图片描述
创建隧道
隧道选择TCP隧道,本地端口输入2978自定义端口
在本地端口输入自定义2978
创建成功后点击服务-软件下载
在这里插入图片描述
首页复制访问密钥在这里插入图片描述
在启动器里面输入密钥,打开隧道

在这里插入图片描述

三、搭建JAVA服务器

打开Intellij-IDEA,启动服务器代码,端口号为2978
在这里插入图片描述
服务器代码

public class ServerSocketFrame extends JFrame {
    private JTextField tf_send;
    private JTextArea ta_info;
    private ServerSocket server; // 声明ServerSocket对象
    private Socket socket; // 声明Socket对象socket
    private Vector<Socket> vector = new Vector<Socket>();// 用于存储连接到服务器的客户端套接字对象
    private int counts = 0;// 用于记录连接的客户人数

    public void getServer() {
        try {
            server = new ServerSocket(2978); // 实例化Socket对象
            ta_info.append("服务器套接字已经创建成功\n"); // 输出信息
            while (true) { // 如果套接字是连接状态
                socket = server.accept(); // 实例化Socket对象
                counts++;
                ta_info.append("第" + counts + "个客户连接成功\n"); // 输出信息
                PrintWriter out = new PrintWriter(socket.getOutputStream(),
                        true);
                out.println(String.valueOf(counts - 1));// 向客户端发送套接字索引
                vector.add(socket);// 存储客户端套接字对象
                new ServerThread(socket).start();// 创建并启动线程序
            }
        } catch (Exception e) {
            e.printStackTrace(); // 输出异常信息
        }
    }

    class ServerThread extends Thread {
        Socket socket = null; // 创建Socket对象
        BufferedReader reader; // 声明BufferedReader对象

        public ServerThread(Socket socket) { // 构造方法
            this.socket = socket;
        }

        public void run() {
            try {
                if (socket != null) {
                    reader = new BufferedReader(new InputStreamReader(socket
                            .getInputStream())); // 实例化BufferedReader对象
                    int index = -1;// 存储退出的客户端索引值
                    try {
                        while (true) { // 如果套接字是连接状态
                            String line = reader.readLine();// 读取客户端信息
                            try {
                                index = Integer.parseInt(line);// 获得退出的客户端索引值
                            } catch (Exception ex) {
                                index = -1;
                            }
                            if (line != null) {
                                ta_info.append("接收到客户机发送的信息:" + line + "\n"); // 获得客户端信息
                            }
                        }
                    } catch (Exception e) {
                        if (index != -1) {
                            vector.set(index, null);// 将退出的客户端套接字设置为null
                            ta_info.append("第" + (index + 1) + "个客户端已经退出。\n"); // 输出异常信息
                        }
                    } finally {
                        try {
                            if (reader != null) {
                                reader.close();// 关闭流
                            }
                            if (socket != null) {
                                socket.close(); // 关闭套接字
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    private void writeInfo(PrintWriter writer, String text) {
        writer.println(text);
    }

    public static void main(String[] args) { // 主方法
        ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象
        frame.setVisible(true);// 显示窗体
        frame.getServer(); // 调用方法
    }

    public ServerSocketFrame() {
        super();
        setTitle("服务器端程序");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 379, 260);

        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);

        ta_info = new JTextArea();
        scrollPane.setViewportView(ta_info);

        final JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.SOUTH);

        final JLabel label = new JLabel();
        label.setText("服务器发送的信息:");
        panel.add(label);

        tf_send = new JTextField();
        tf_send.setPreferredSize(new Dimension(150, 25));
        panel.add(tf_send);

        final JButton button = new JButton();
        button.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                for (int i = 0; i < vector.size(); i++) {
                    Socket socket = vector.get(i);// 获得连接成功的套接字对象
                    PrintWriter writer;
                    try {
                        if (socket != null && !socket.isClosed()) {
                            writer = new PrintWriter(socket.getOutputStream(),
                                    true);// 创建输出流对象
                            writeInfo(writer, tf_send.getText()); // 将文本框中信息写入流
                        }
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
                ta_info.append("服务器发送的信息是:" + tf_send.getText() + "\n"); // 将文本框中信息显示在文本域中
                tf_send.setText(""); // 将文本框清空
            }
        });
        button.setText("发  送");
        panel.add(button);

        final JPanel panel_1 = new JPanel();
        getContentPane().add(panel_1, BorderLayout.NORTH);

        final JLabel label_1 = new JLabel();
        label_1.setForeground(new Color(0, 0, 255));
        label_1.setFont(new Font("", Font.BOLD, 22));
        label_1.setText("一对多通信——服务器端程序");
        panel_1.add(label_1);
    }
}

四、互联

手机下载网络调试助手
然后输入ip地址
点击软件日志即可查看,或者使用任务管理器ping一下也可以获得公网ip地址,然后输入软件分配的端口号即可互联通信,注意要先打开服务器,再使用手机连接

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python 内网穿刺(Python reverse shell)是一种技术,用于在一个局域网中的计算机上远程执行命令。它通常用于网络安全测试和渗透测试中,以验证系统的安全性。 在 Python 中,可以使用 `socket` 模块来实现一个简单的内网穿刺工具。下面是一个简单的例子: ```python import socket import subprocess # 设置监听的本地 IP 和端口号 host = '192.168.1.100' port = 1234 # 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定 IP 和端口号 s.bind((host, port)) # 监听连接 s.listen(1) print(f"Listening on {host}:{port}...") # 接受连接 conn, addr = s.accept() print(f"Connected by {addr[0]}:{addr[1]}") # 循环接收和执行命令 while True: cmd = conn.recv(1024).decode() if cmd.lower() == 'exit': break output = subprocess.getoutput(cmd) conn.send(output.encode()) # 关闭连接 conn.close() ``` 以上代码是一个简单的服务器端程序,它会监听指定的 IP 和端口,接受客户端的连接,并将客户端发送的命令执行后返回结果。你可以将该代码保存为 `server.py` 并在服务器上运行。 客户端代码如下: ```python import socket # 设置服务器的 IP 和端口号 host = '192.168.1.100' port = 1234 # 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器 s.connect((host, port)) # 循环发送命令并接收结果 while True: cmd = input("Enter command (or 'exit' to quit): ") s.send(cmd.encode()) if cmd.lower() == 'exit': break output = s.recv(1024).decode() print(output) # 关闭连接 s.close() ``` 以上代码是一个简单的客户端程序,它会连接到指定的服务器 IP 和端口,并发送用户输入的命令,并打印服务器返回的结果。你可以将该代码保存为 `client.py` 并在客户端上运行。 需要注意的是,内网穿刺是一种潜在的安全风险,使用时需要谨慎,并确保在合法授权的范围内进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matken

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值