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. Linux上安装jdk 1.8

    1.下载jdk1.8 这里贴个oracle官网链接 https://www.oracle.com/java/technologies/downloads/  里面的jdk版本基本都有 2.将压缩包上传 ...

  2. MySQL5.7.35的安装

    Step①: 下载安装包,MySQL下载地址:百度 Step②: 解压至你的安装路径,我个人是在E盘存放.  Step③: 配置环境变量. ①:在系统属性中,点击环境变量. ②:找到环境变量-> ...

  3. OSI七层模型与TCP/IP协议

    作者:菘蓝 时间:2022/9/1 ================================================================================== ...

  4. 【Vue学习笔记】—— vuex的语法 { }

    学习笔记 作者:o_Ming vuex Vuex ++ state ++ (用于存储全局数据) 组件访问 state 中的全局数据的方式1: this.$store.state.全局数据 组件访问 s ...

  5. JS输出内容为[object Object]

    问题描述 项目中,欲在控制台输出变量res(自定义对象)查看数据,代码为: console.log('res:' + res); 但控制台显示结果为res: [object Object],并非想要查 ...

  6. JS作用域、变量提升和闭包

    作用域 作用域可以理解为JS引擎执行代码的时候,查找变量的规则. 从确定变量访问范围的阶段的角度,可以分为2类,词法作用域和动态作用域.js是词法作用域. 从变量查找的范围的角度,可以分为3类,全局作 ...

  7. 《网页设计基础——CSS的四种引入方式详解》

    网页设计基础--CSS的四种引入方式详解     一.行内式:   规则: 1. 行内式是所有样式方法中最为直接的一种,它直接对HTML的标记使用style属性,然后将CSS代码直接写在其中.   格 ...

  8. Django 简介和版本介绍

    一.简介 官方地址:https://www.djangoproject.com Django 是一个由Python 编写的具有完整架站能力的开源Web框架.使用 Django,只要很少的代码,开发人员 ...

  9. Kubernetes DevOps: Tekton

    Tekton 是一款功能非常强大而灵活的 CI/CD 开源的云原生框架.Tekton 的前身是 Knative 项目的 build-pipeline 项目,这个项目是为了给 build 模块增加 pi ...

  10. Python 类型提示简介

    Python 3.6+ 版本加入了对"类型提示"的支持. 这些"类型提示"是一种新的语法(在 Python 3.6 版本加入)用来声明一个变量的类型. 通过声明 ...