• Java学习之socket网络编程篇


    Java学习之socket网络编程篇

    0x00 前言

    在一些工具开发中,最离不开的可能就是网络编程了,例如目录扫描器、端口扫描、包括exp这些其实都是依赖于socket。就拿简单的exp来说其实就是已经构造好的一段payload,然后使用socket发送网络请求过去,然后利用漏洞获取到一个shell。

    0x01 socket类概述

    Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。

    注意事项:

    1. 服务端程序,需要事先启动,等待客户端的连接。
    2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。
    

    在Java中,提供了两个类用于实现TCP通信程序:

    1. 客户端:java.net.Socket 类表示。创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
    2. 服务端:java.net.ServerSocket 类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。

    0x02 Socket使用

    查看构造方法:

    Socket(String host, int port) 
        创建一个流套接字并将其连接到指定主机上的指定口号。
    

    构造方法实例:

    Socket client = new Socket("127.0.0.1", 6666);
    

    成员方法:

    getInputStream() 
              返回此套接字的输入流
    getOutputStream() 
              返回此套接字的输出流
     void bind(SocketAddress bindpoint) 
              将套接字绑定到本地地址。 
     void close() 
              关闭此套接字。 
     void connect(SocketAddress endpoint) 
              将此套接字连接到服务器。 
    
    

    0x03 ServerSocket使用

    构造方法:

    ServerSocket(int port) 
              创建绑定到特定端口的服务器套接字。
    

    常用方法:

    accept() 
        侦听并接受到此套接字的连接。
    bind(SocketAddress endpoint, int backlog) 
        将 ServerSocket 绑定到特定地址(IP 地址和端口号)。 
     void close() 
              关闭此套接字 
    
    
    

    0x04 Socket 代码实例

    客户端代码:

    public static void main(String[] args) throws IOException {
            Socket client = new Socket("127.0.0.1",8080);
            OutputStream os = client.getOutputStream();
            os.write("nihao".getBytes());
            os.close();
            client.close();
            
    
        }
    

    创建一个socket对象,构造方法对其传入参数,使用getOutputStream获取一个套接字输出流,然后对其写出字符。这里的字符传输时,需要转换为byte类型。

    服务端:

     public static void main(String[] args) throws IOException {
            ServerSocket ss = new ServerSocket(8888);
            System.out.println("监听中");
            Socket server = ss.accept();
            InputStream is = server.getInputStream();
            byte[] b = new byte[1024];
    
            int len = is.read(b);
            String msg = new String(b,0,len);
            System.out.println(msg);
            is.close();
            server.close();
        }
        
    

    使用serversocket类实例化一个对象,使用accept接收套接字的连接,连接时候会生成新的套接字,使用新的套接字获取套接字输入流,读取客户端传入的数据进行打印。

    0x05 结尾

    这篇文章比较短,不知道该写点什么案例来做演示。JaveSE的部分暂时也告一段落了,开始步入JavaWeb部分。

  • 相关阅读:
    js 动态创建HTML元素
    ASP.NET的几种主要文件
    【荐】Asp.net对文件夹和文件的操作类
    201920201学期 20192415 《网络空间安全专业导论》第二周学习总结 第五章
    201920201学期 20192415《网络空间安全专业导论》第一周学习总结 第二章
    201920201学期 20192415 《网络空间安全专业导论》第二周学习总结 第四章
    201920201学期 20192415 《网络空间安全专业导论》第一周学习总结 第三章
    C# 自动生成类
    div左右布局
    EFCodeFirst安装失败(包括EntityFrameWork安装)解决方案
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13467408.html
Copyright © 2020-2023  润新知