golang替换无法显示的特殊字符(\\u0000, \\000, ^@)
作者:sndapk 发布时间:2024-04-25 13:17:17
标签:golang,特殊,字符,\u0000,\000,^@
描述
在linux中获取进程cmdline时遇到隐藏符号问题,如下:
[root@vm010066016161 /root]
#cat /proc/45/cmdline
/usr/sbin/sshd-D
[root@vm010066016161 /root]
#cat /proc/45/cmdline -A
/usr/sbin/sshd^@-D^@
[root@vm010066016161 /root]
#cat /proc/45/cmdline | sed -n 'l'
/usr/sbin/sshd\000-D\000$
[root@vm010066016161 /root]
这样的数据直接在终端显示是没问题的,但是记录到日志中,变成:
{"level":"info","ts":1650267870.4412727,"caller":"ssh/manager.go:78","msg":"/usr/sbin/sshd\u0000-D\u0000"}
或
/usr/sbin/sshd-D
而系统实际的进程启动参数为:
root 45 1 0 Jan12 ? 00:01:57 /usr/sbin/sshd -D
此时,如果查看切片的内容,可以看到包含了无法显示的ascii码,空格码点变成了0(我们要做的是把这个替换为十进制32对应真实的空格)
[]byte: [47 117 115 114 47 115 98 105 110 47 115 115 104 100 0 45 68 0]
解决方法一,手动处理
这里只贴上主要代码:
cmd := fmt.Sprintf("cat /proc/%s/cmdline", pid)
cmdline, _, err := e.SSHManager.Run(cmd)
if err != nil {
e.logger.Error(fmt.Sprintf("pid(%s) CMDLine error[%s]", pid, err.Error()))
return err
}
newByte := make([]byte, 0)
for _, b := range []byte(cmdline) {
if b == 0 { //小于32的字符都可以以这样的方式处理,本次只处理0
newByte = append(newByte, 32)
} else {
newByte = append(newByte, b)
}
}
newResult := strings.TrimSpace(string(newByte)) //结果的空格不需要
解决方法二,使用bytes库(推荐)
// ...略
newByte := bytes.ReplaceAll([]byte(cmdline), []byte{0}, []byte{32})
newByte = bytes.TrimSpace(newByte)
newResult := string(newByte)
if len(newResult) > 64 {
newResult = newResult[:64]
}
e.Pids[pid].CMDLine = newResult
来源:https://blog.51cto.com/sndapk/5216291
0
投稿
猜你喜欢
- 使用了application及结合数据库来保存统计数据 <html><head><title>
- 前言不管是做开发还是做过网站的朋友们,应该对于User Agent一点都不陌生,User Agent 中文名为用户代理,简称 UA,它是一个
- 一、说明前面我们说了mysql的安装配置,mysql语句使用以及备份恢复mysql数据;本次要介绍的是mysql的主从复制,读写分离;及高可
- 一、实验原理。 本次用代码实现的是ARP网关欺骗,通过发送错误的网关映射关系导致局域网内其他主机无法正常路由。使用scapy中scapy.a
- 上一篇文章讲解了如何实现马丁策略,但没有探索其泛化能力,所以这次来尝试回测3000只股票来查看盈利比例。批量爬取股票数据这里爬取数据继续使用
- 1. JSON简介JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子
- 如何实现自定义一个异常python内置了许多异常类,为编写代码划定红线,才使调试代码时能及时发现错误。那么我们编写一个模块也可以为使用此模块
- 上传完整django项目文件到服务器sftp ftp lrzsz都可以上传文件到服务器,看自己我django项目叫yunwei,主要app是
- 1.首先在pycharm上使用pip安装pip install html-table pip install jira2.初始化发件人邮箱,
- 前言上篇文章主要写了利用scapy实现ping扫描,这篇文章主要是利用scapy模块实现内网ARP扫描实现过程上篇文章中介绍了通过scapy
- python版本要求在3.3.x,需要mysql connector for python第三方库支持不适用所有的zencart导入到mag
- 前言在我们的日常开发中, 常用的中间件有很多, 今天来讲一下怎么集成限流中间件, 它可以很好地用限制并发访问数来保护系统服务, 避免系统服务
- 参考于: python cs架构实现简单文件传输原文中程序运行有误,在此做修改与解释,如下: 功能说明:共2个py文件分别为server和c
- atan()方法返回x的反正切值,以弧度表示。Syntax以下是atan()方法的语法:atan(x)注意:此函数是无法直接访问
- 代码优化 for($i=0;$i<8;$i++){ array_push($week,$arr); } for($i=0;$i<
- 1、简介APScheduler是一个 Python 定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及 crontab 类型的
- 本文实例为大家分享了vue简单实现购物车结算的具体代码,供大家参考,具体内容如下样式没有写<template> <
- 一、前提由于我安装了几次,我就不再讲述报错了,有点打脑壳!!!提前把相关依赖和报错就地解决。1、所需源码包mysql-8.0.19.tar.
- js的setTimeout方法用处比较多,通常用在页面刷新了、延迟执行了等等。但是很多javascript新手对setTimeout的用法还
- 0 背景由于工作需要,利用spark完成机器学习。因此需要对spark集群进行操作。所以利用pycharm和pyspark远程连接spark