springboot3.x入门系列【5】支持unix sock 套接字服务

目录

一、简介

二、springBoot3.x 套接字的支持

1. 环境要求

2.  springboot内置tomcat

2.1 支持unix 设置 unixDomainSocketPath

2.2 windows 下unix服务测试

3. springboot外置tomcat 

3.1 tomcat  配置unix socket 套接字

3.2 启动tomcat 服务

3.3 nginx 支持unix 转发

3.4 unix 接口测试

3.5 nginx 路由接口测试

4. unix socket  服务器抓包

4.1 Socat抓包

4.2 tcp 抓包

4.3 查看特定套接字服务

4.4 查看套接字关联所有信息


一、简介

Unix套接字(Unix Sockets),也称为本地套接字,是一种特殊的网络套接字,用于运行在同一台主机上的进程之间的通信。以下是Unix套接字的一些优缺点

优点:

  1. 性能高效

    • Unix套接字避免了内核与用户空间之间的数据复制开销,因为它们运行在同一个操作系统中,这可以提高通信性能。
  2. 速度快

    • 由于避免了网络协议栈的开销,Unix套接字通常比网络套接字(如TCP/IP套接字)具有更快的通信速度。
  3. 简单性

    • Unix套接字的API与传统的套接字API相似,易于理解和使用。
  4. 文件系统集成

    • Unix套接字在文件系统中表现为文件,可以使用标准文件操作进行访问,这使得它们易于管理和访问。
  5. 安全性

    • Unix套接字可以使用文件权限进行保护,只有具有适当权限的用户才能访问套接字。
  6. 支持多种通信协议

    • 支持多种协议,如流式套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。
  7. 无网络配置需求

    • 因为它们不依赖于网络协议栈,所以不需要IP地址、端口号等网络配置。

缺点:

  1. 仅限于本地主机

    • Unix套接字不能用于跨网络或跨主机的通信。
  2. 平台依赖性

    • Unix套接字主要在类Unix系统上使用,Windows平台的支持有限。
  3. 可能的文件系统限制

    • 由于Unix套接字在文件系统中表示,它们可能受到文件系统大小和权限的限制。
  4. 安全性限制

    • 虽然可以使用文件权限进行保护,但Unix套接字的安全性不如基于网络的套接字,后者可以使用更复杂的安全机制。
  5. 调试和监控难度

    • 由于Unix套接字的通信在系统内部进行,可能难以使用传统的网络监控工具进行调试和监控。
  6. 生命周期管理

    • 如果使用不当,Unix套接字可能会遗留在文件系统中,需要适当的清理策略来避免资源泄露。
  7. 不支持广播或多播

    • Unix套接字不支持广播或多播通信,这限制了它们在某些场景下的应用。

二、springBoot3.x 套接字的支持

1. 环境要求

1.1  unix socket 套接字支持需要jdk16 及上才可以支持;

2.  springboot内置tomcat

2.1 支持unix 设置 unixDomainSocketPath
package com.chopin.uninx.uninx.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.time.Duration;/*** @class MyTomcatWebServerFactoryCustomizer* @description* @copyright Copyright: 2024-2030* @creator chopin* @create-time 2024/6/21 15:26**/
@Slf4j
@Component
public class MyTomcatWebServerFactoryCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {private static final String DEFAULT_SOCKET_PATH = "D:" + File.separator + "http.sock";/****/@Overridepublic void customize(TomcatServletWebServerFactory factory) {log.info("MyTomcatWebServerFactoryCustomizer  init");factory.addConnectorCustomizers(connector -> {String path = "";String os = System.getProperty("os.name").toLowerCase();if (os.contains("win")) {log.info("Running on Windows");path = DEFAULT_SOCKET_PATH;} else if (os.contains("nux")) {log.info("Running on linux");path = "/opt/http.sock";} else {log.info("OS not recognized");return;}File file = new File(path);if (file.exists()) {log.info("file :{} delete", path);file.delete();}connector.setProperty("unixDomainSocketPath", path);});}
}

服务启动的时候会自动生成sock文件

注!  springboot启动时需要进行检测该文件是否存在,如果存在需要进行删除,不然会提示服务占用

2.2 windows 下unix服务测试

3. springboot外置tomcat 

3.1 tomcat  配置unix socket 套接字

1. 进入tomcat  配置文件

2.配置 unix socket

3) 配置jdk环境

vim setclasspath.sh

4) 配置jvm

vim catalina.sh

3.2 启动tomcat 服务

sh startup.sh  && tail -f ../logs/catalina.out

启动打印套接字地址

注!当服务器存在套接字服务文件时会启动失败

3.3 nginx 支持unix 转发

1) 配置upstream unix

upstream unix {server unix:/opt/cms.sock;}

2) 接口路由

注!(selinux 必须处于关闭状态,不然进行unix转发会提示无权限)

location ^~/sUpms/ {client_max_body_size 30m;proxy_set_header Host $host:$server_port;proxy_set_header X-Forwarded-Host $server_name;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";rewrite ^/sUpms/(.*)$ /sUpms/$1 break;proxy_pass http://unix; #负载均衡配置}
3.4 unix 接口测试
curl --silent -XPOST --unix-socket /opt/cms.sock  -H 'Content-Type: application/json' http://localhost/sUpms/v1/common/getPublicKey
 3.5 nginx 路由接口测试

4. unix socket  服务器抓包

 4.1 Socat抓包

sudo mv /opt/cms.sock   /opt/cms.sock.original

sudo socat -t100 -x -v UNIX-LISTEN:/opt/cms.sock,mode=777,reuseaddr,fork UNIX-CONNECT:/opt/cms.sock.original

4.2 tcp 抓包

1)重命名原来的 socket 文件

sudo mv /opt/cms.sock   /opt/cms.sock.original

2) 创建中间的 tcp socket 并拷贝流量

sudo socat TCP-LISTEN:18089,reuseaddr,fork UNIX-CONNECT:/opt/cms.sock.original &

3)创建原来的 socket 文件并拷贝流量

 sudo socat UNIX-LISTEN:/opt/cms.sock,fork TCP-CONNECT:127.0.0.1:18089 &

4) 使用 tcpdump 在中间的 tcp socket 上抓包

存储为文件

tcpdump -i any -s0 -nn -vv -A -w unix.cap tcp port  18090

实时

tcpdump -i any -s0 -nn -vv -A tcp port  18090

4.3 查看特定套接字服务

启用了sockt 或者tcp抓包会导致命令无效

使用 lsof -U | grep http.sock 

 4.4 查看套接字关联所有信息

 lsof  | grep http.sock

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SLAM学习笔记

从《slam十四讲开始》 slam十四讲推荐的其他书籍 《概率机器人》&#xff08;Probabilistic robotics &#xff09; 《计算机视觉中的多视图几何》&#xff08;Multiple View Geometry in Computer Vision &#xff09; 《机器人学中的状态估计》&#xff08;State Estimation…

操作系统

操作系统是控制和管理计算机硬件和软件资源。 管理和控制电脑系统软硬件资源的软件叫作操作系统&#xff0c;操作系统是最基本、最重要的系统软件&#xff0c;由一组控制计算机系统并对计算机系统进行管理的程序组成&#xff0c;是用户与计算机硬件系统的接口&#xff0c;并为用…

VMware网络模式

一.VMware虚拟网络 VMware支持共创建20个虚拟网络&#xff0c;相当于现实生活的交换机&#xff0c;名称vmnet0---vmnet19 物理机用虚拟网卡和对应的虚拟网络中的虚拟机通信。 VMnet1和VMnet8这两个虚拟网卡的作用是保证windows和虚拟机可以正常通信。VMware Workstation Pro这…

python-读写Excel:xlwings库操作

几种操作Excel的python库对比 安装:pip install xlwings 目录 APP实例化对象 工作薄对象 创建工作薄 打开工作薄 工作薄属性 工作表对象 新增工作表 复制表 获取工作表对象 工作表属性 删除和清除表数据及表格式 工作表行高列宽(自动调整) 单元格对象 获取单元…

秋冬春夏,纪念在CSDN的第365天

目录 时光 收获 工作 生活 憧憬 时光 再次收到创作纪念日的消息时&#xff0c;已在CSDN创作和度过了一年的时光。创作&#xff0c;成了自己的第二工作空间&#xff0c;成为了日常的一种习惯。 每当看到第1篇文章的提醒消息&#xff0c;都会想起当时创作的初衷和情景。是一…

在手机在线预览3D模型,是如何实现的?

在手机在线预览3D模型&#xff0c;主要依赖于几个关键技术和步骤来实现。以下是一个概括性的流程&#xff1a; 一、模型上传 选择平台&#xff1a;首先&#xff0c;用户需要选择一个支持3D模型在线预览的平台&#xff0c;如51建模网、Sketchfab等。这些平台通常提供用户友好的…

五分钟本地部署Uptime Kuma运维监控结合内网穿透实现远程访问

文章目录 前言**主要功能**一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址…

Kafka的生产者和消费者机制

目录 1.基础的客户端 1.1消息发送者的主流程 1.2消息消费者主流程 2.客户端工作机制 2.1消费者分组消费机制 2.2生产者拦截器机制 2.3消息序列化机制 2.4消息分区路由机制 2.5生产者消息缓存机制 2.6发送应答机制 2.7生产者消息幂等性 (1)生产者消息幂等性介绍 (2…

XDMA原理

目录 1. BAR Space Map2. PCIe to AXI Lite Master2.1. BAR Address to AXI Address 3. PCIe to DMA Bypass4. AXI4 Memory Mapped4.1. Register Space 5. AXI Lite Slave Configuration Interface6. MSI/MSI-X Interrupt6.1. Interrupts Configuration6.2. IRQ Module 7. IP E…

Gitlab迁移到新的服务器后点击Integrations报500错误的解决方法

目录 一、问题描述二、解决方法1.方法12.方法2(1)备份 /etc/gitlab/gitlab-secrets.json(2)进入数据库(3)查看 Project ID(4)查找 hook ID 并删除(5)申请访问令牌并执行 api 删除操作一、问题描述 Gitlab迁移到新的服务器后点击Integrations报500错误: 查后台日志…

前后端开发学习路线 囊括Dubbo、Elasticsearch等

以下都是博主本人看过后给出的推荐。 文章目录 前端入门Web开发基础&#xff08;HTML、CSS、JS&#xff09;写项目前置&#xff08;AJAX、Vue等&#xff09;开始写项目&#xff08;Vue、Uniapp&#xff09;重点Future 入门Java后端基础部分&#xff08;Java、MySQL&#xff09;…

kubectl陈述式资源管理方式、声明式资源管理

一、命令行: kubectl命令行工具 优点: 90%以上的场景都可以满足 对资源的增&#xff0c;删&#xff0c;查比较方便&#xff0c;对改不是很友好 缺点:命令比较冗长&#xff0c;复杂难记 声明方式&#xff1a;k8s当中的yaml文件实现资源管理----声明式 GUI:图形化工具的管理…

【终端IDPS】开源安全平台Wazuh之Wazuh Server

引言 Wazuh是一个开源的、免费的企业级安全监控解决方案&#xff0c;专注于威胁检测、完整性监控、事件响应和合规性。它由部署在受监控系统的端点安全代理和管理服务器组成&#xff0c;服务器收集并分析代理收集的数据。Wazuh支持多平台&#xff0c;包括Windows、Linux、macOS…

VLM 系列——Mini-Monkey——论文解读

一、概述 1、是什么 Mini-Monkey 论文全称《Mini-Monkey: Multi-Scale Adaptive Cropping for Multimodal Large Language Models》&#xff0c;是一个轻量级MLLM&#xff08;多模态的视觉-文本模型&#xff09;&#xff0c;基于InternViT、MLP和InternLLM&#xff0c;其实就是…

基于元神操作系统编程写硬盘扇区

1. 背景 本文介绍了“调用元神操作系统API向硬盘扇区写数据”的程序实现及测试结果。 2. 方法 &#xff08;1&#xff09;调用元神操作系统API读硬盘扇区 本部分内容已在前面的文章中进行介绍&#xff0c;详细内容请参考“编写程序调用元神操作系统的API”。 &#xff08;…

STM32F103与ESP8266 WIFI模块的USART中断调试

本文概述了利用STM32F103的HAL库&#xff0c;通过USART中断方式调试ESP8266&#xff08;ESP-01&#xff09;WIFI模块的方法。首先介绍了开发环境和ESP-01模块的基本特点与功能&#xff0c;随后展示了如何通过电脑PC的串口助手进行初步调试与验证。最后&#xff0c;重点阐述了如…

SpringBoot-读取配置文件方式

前言 Spring Boot提供了多种灵活的方式来读取配置文件&#xff0c;以适应不同的开发和部署需求&#xff0c;SpringBoot启动的时候&#xff0c;读取配置文件的时候&#xff0c;首先获取的是file:/config/文件下的配置文件&#xff0c;也就是项目下config文件里面的配置文件&…

jmeter 响应乱码

Jmeter在做接口测试的时候的&#xff0c;如果接口响应的内容中有中文&#xff0c;jmeter的响应内容很可能显示乱码&#xff0c;为了规避这种出现乱码的问题&#xff0c;就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试&#xff0c;出现以下乱码问…

等保需要的设备部署vs网络安全域划分原则

等保需要的安全设备和部署 技术要点–等保2级 技术要点–等保3级 安全产品/服务全景图 选型产品说明 安全区域边界配置 资产探测及漏洞检测配置 网络安全域划分原则 网络安全域 定义 网络安全域是一种网络划分方式&#xff0c;将具有相同安全需求、访问控制、相同信任级别、…

【MySQL 14】用户管理

文章目录 &#x1f308; 一、用户管理⭐ 1. 用户信息⭐ 2. 创建用户⭐ 3. 修改密码⭐ 4. 删除用户 &#x1f308;二、数据库的权限⭐ 1. 权限列表⭐ 2. 查看权限⭐ 3. 授予权限⭐ 4. 回收权限 &#x1f308; 一、用户管理 MySQL 也会区分普通用户和超级用户。如果只是访问某一…