java学习之socket编程
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编程的更多相关文章
- 读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- 读懂Java中的Socket编程(转)
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- java中的socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- Linux学习之socket编程(二)
Linux学习之socket编程(二) 1.C/S模型——UDP UDP处理模型 由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,实际上有很多保证通讯可靠性的机制需要在应用层实 ...
- Java学习之网络编程实例
转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...
- Java学习:网络编程总结
Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...
- Java学习之网络编程
转自:http://blog.csdn.net/driverking/article/details/6573992 一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章 ...
- java.net.Socket/java.net.ServerSocket-TCP Socket编程
TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...
- Linux学习之socket编程(一)
socket编程 socket的概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进 ...
随机推荐
- 定时器控制单只LED灯
点击查看代码 #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED=P0^0; ...
- hadoop项目之求出每年二月的最高气温(Combiner优化)
hadoop项目之求出每年二月的最高气温(Combiner优化) 一.项目结构 一.java实现随机生成日期和气温 package com.shujia.weather; import java.io ...
- zabbix_agentd断断续续端无法访问问题记录
问题现象: zabbix监控上出现zabbix_agentd无法访问,但是实际上zabbix_agentd是存活状态 每隔一段时间就会出现这样的情况 问题原因 zabbix_agentd端任务较多,活 ...
- C++ 调用 Python(通过Boost.Python)
本文将用一个小的示例来展示如何通过Boost.Python 来实现 C++/Python 混合编程从而将两种语言的优势整合到一起. 1. CMakeLists.txt cmake_minimum_re ...
- OpenDataV低代码平台新增组件流程
OpenDataV计划采用子库的方式添加子组件,即每一个组件都当做一个子库,子库有自己的依赖,而项目本身的依赖只针对框架,因此每一个组件我们都当做一个子库来开发.下面我带着大家一步步详细的开发一个数字 ...
- Jmeter处理响应报文中文乱码
Jmeter在访问发送请求的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析.而我们的响应报文却是utf-8的格式,所 ...
- 使用kubectl管理Kubernetes(k8s)集群:常用命令,查看负载,命名空间namespace管理
目录 一.系统环境 二.前言 三.kubectl 3.1 kubectl语法 3.2 kubectl格式化输出 四.kubectl常用命令 五.查看kubernetes集群node节点和pod负载 5 ...
- Windows 10 Technical Preview 屏幕亮度
下载了 Windows 10 Technical Preview 安装好之后都挺正常的,就是显卡驱动没有, 联上网络, 自动找到驱动,看起来一切都挺好的. 但是重启之后,屏幕就变得特别暗了, 亮 ...
- Django 之路由层
一.Django 请求周期生命流程图 首先,用户在浏览器中输入URL,发送一个GET 或 POST 方法的request 请求. Django 中封装了socket 的WSGI 服务器,监听端口接受这 ...
- 关于使用kubeoperator搭建k8s集群使用containerd作为容器运行时,从自己搭建的habor仓库拉取镜像的有关说明
1.kubepi界面添加habor仓库信息,并授权给k8s集群 这一步的操作是当在工作负载选择从harbor仓库拉取镜像时会自动创建有关的secrets信息,从而不用事先手动创建了(有别于kuboar ...