0x00前言和思维导图

Socks实际上是什么:实际上是提供了精彩通信的端口,在通信之前双方都必须要创造一个端点才能通信,其实感觉socket跟计算机的三次握手有些相似,分为三个步骤:

(1)服务器监听:服务器不知道下一个客户端的具体套接字,而是处于等待连接的状态

(2)客户端请求:由客户端的套接字提出请求,连接目标是服务器的套接字。

(3)连接确认:服务器接收到客户端的套接字请求,它就响应客户端的请求,创建一个新的线程把服务器套接字的具体描述发个客户端,客户端确认以后,这个连接就建立好了,服务端继续进入监听状态。

0x01socks的编程

0x1客户端的编写

(1)首先是Socket类的构造方法public Socket(String host, int port),前面是你连接的服务端的ip,后面是连接端口。

(2)socketlei下面的成员方法

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

(3)一些方法的使用,传输数据

a.outputstream.write("数据".getbytes())需要把类型转化成字节类型看一看它的源码public void write(byte b[])

b.可以利用另一个类去完成PrintWriter : 高级输出流

c.PrintWriter pw3 = new PrintWriter(socket.getOutputStream());发送给服务器或者客户端

d.Scanner scan3 = new Scanner(socket.getInputStream())网络通信里面去读取对方发给我的信息

e.用缓冲流去接受信息

InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
class Mysocks_test1{
public static void main(String[] args) {
try {
Socket socket=new Socket("127.0.0.1",9099);
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("客户端发送信息");
pw.flush();
socket.shutdownOutput();
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));//按照字符流读取,缓冲流
String info=null;
while ((info= br.readLine())!=null){
System.out.println("我接受到的信息是"+info);
}
br.close();
is.close();
os.close();
pw.close();
socket.close(); } catch (IOException e) {
e.printStackTrace(); } }
}

0x2服务端的编写

(1)构建一个线程去接受一个客户端的请求与客户端交互

(2)InetAddress类从名字就可以看出来ip地址类,

用法:socket.getInetAddress(),获取ip地址
构造方法public InetAddress getInetAddress()返回的是一个InetAddress对象

看一下代码

点击查看代码
public class JAVA_serverSocket {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8080);
Socket socket=new Socket();
while (true){
socket=serverSocket.accept();
ServerThread thread=new ServerThread(socket);
thread.start();
InetAddress address=socket.getInetAddress();//获取客户端的IP
System.out.println("目标客户端的ip是"+address); }
} catch (IOException e) {
e.printStackTrace();
}
}
}

####0x3服务端线程
(1)构建的时候采用的是继承Thread的方法去构建的,还有两种方法(写一个类去实现接口Runnable,调用类对象)(匿名内部类)()。
(2)编写完成后一定要记得关闭所有流和socket

点击查看代码
public class ServerThread extends Thread{
private Socket socket=null;
public ServerThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
is=socket.getInputStream();
isr=new InputStreamReader(is);
br=new BufferedReader(isr);
String info=null;
while ((info= br.readLine())!=null);{
System.out.println("我是服务,客户机说"+br.readLine());
}
socket.shutdownInput();
os=socket.getOutputStream();
pw=new PrintWriter(os);
pw.write("服务器欢迎你");
} catch (IOException e) {
e.printStackTrace();
}finally {
try{
if (pw != null) {
pw.close();
if (os != null) {
os.close();
} }
if (br != null) {
br.close();
}
if (isr != null) {
isr.close();
}
if (is != null) {
is.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
} }
}
}

的编写
###0x02总结
这里只写了一个专业的两个客户端,其实还有很多改进的地方可以通过代理词去进行会话管理,还没有进行一下手动的输入信息,和发送过去的数据可以当做cmd的指令来执行,这个东西可能给以后的shell获取有关
学习一点免杀和shell设计之后再来继续深入
其他要用于payload的发送,还有就是写一些内网探测的脚本,但是这些在python上面已经写好了大部分的工具了,以后可能做系统的软件开发的话可能会用到
socket就先告别一个段落把

java学习之socket编程的更多相关文章

  1. 读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  2. 读懂Java中的Socket编程(转)

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  3. java中的socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  4. Linux学习之socket编程(二)

    Linux学习之socket编程(二) 1.C/S模型——UDP UDP处理模型 由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,实际上有很多保证通讯可靠性的机制需要在应用层实 ...

  5. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  6. Java学习:网络编程总结

    Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...

  7. Java学习之网络编程

    转自:http://blog.csdn.net/driverking/article/details/6573992 一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章 ...

  8. java.net.Socket/java.net.ServerSocket-TCP Socket编程

    TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...

  9. Linux学习之socket编程(一)

    socket编程 socket的概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进 ...

随机推荐

  1. CCC3.0 NFC OWNER PAIRING

    OWNER PAIRING 本篇只介绍所有操作都成功执行的场景,中间如果出现异常,需要翻看规范决定接下来的操作 一些密钥 公私密钥对(Vehicle.PK&Vehicle.SK) Endpoi ...

  2. 第九十八篇:Web的储存机制LocalStorage

    好家伙 1.什么是LocalStorage? LocalStorage 是一种 web 端的存储机制, 它使得由 JavaScript 编写的网站或者应用可以无限期的在浏览器中存储并访问数据. Loc ...

  3. 第七十篇:Vue组件的使用

    好家伙, 1.vue的组件化开发 1.1.什么是组件? 组件是对UI结构的复用, vue是一个支持组件化开发的前端框架, vue中规定:组件的后缀名是.vue 例如:App.vue文件本质上就是一个v ...

  4. KingbaseES OOM 可能原因汇总

    背景 不久前,遇到过一个问题.KingbaseES数据库主机系统触发OOM现象是数据库进程被KILL, 数据库进入crash然后restart(when restart_after_crash=on) ...

  5. KingbaseES触发器介绍

    触发器及其作用 触发器(trigger)是用户定义的由事件驱动的特殊过程.一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制. 触发器类似于约束,但是比 ...

  6. Filebeat Nginx Module 自定义字段

    Filebeat Nginx Module 自定义字段 一.修改/usr/local/nginx/conf/nginx.conf中 log_format access '$remote_addr - ...

  7. 国产PLM软件在创新实践中强势崛起

    近日,"璞华PLM"先后获得微度医疗.埃特斯等多个客户的订单,即使在疫情环境下也展现出了强劲的高速增长.在产品生命周期管理(PLM,Product Lifecycle Manage ...

  8. Exchange 2019数据库切换

    最近在测试Exchange 2019的一些安装步骤.在测试到DAG的数据库切换的时候遇到了一些问题.An Active Manager operation failed. Error: The dat ...

  9. thinkphp5.1打印SQL语句

    最近在写tp框架搭建的小玩具,有时候我们需要查看SQL语句.所以就诞生了这篇随笔,命令如下: $xxx=db('xxx')->where('x',xx)->select(); $sql=D ...

  10. 四元数Quaternion的基本运算

    技术背景 在前面一篇文章中我们介绍了欧拉角死锁问题的一些产生背景,还有基于四元数的求解方案.四元数这个概念虽然重要,但是很少会在通识教育课程中涉及到,更多的是一些图形学或者是工程学当中才会进行讲解.本 ...