- 博客(53)
- 收藏
- 关注
原创 udp发送数据如果超过1个mtu时,抓包所遇到的问题记录说明
如果消息长度是64k以内,不需要开发人员在应用层分片,发送不会失败,但是单次最大长度是1500-头部,大概1400多,也就是会分片传多次,接收端会自行会重组数据的,但不会校验,如果在传输过程中有数据包丢失或损坏,接收端可能无法重组出完整的数据。所以:udp发送超过64k(大概的数字,除去ip和udp头部长度),需要开发人员在应用层把消息分片,不然系统的发送接口sendto会报错(message too long),返回-1,发送失败,接收端收不到任何消息。接收端开启的是linux自带的rsyslog服务。
2024-07-03 16:38:02 1391
原创 生产者发送数据,kafka服务器接收数据异常的问题记录
发送端的生产者是轮询的发送机制发送数据,客户的kafka服务器的某个topic有三个分区,客户反馈只有一个分区收到数据,其他分区没有,客户质疑是我们的轮询机制有问题。所以我要求客户重建了新的topic,也是三个分区,这个时候接收却正常了,三个分区都可接收数据也确实是按照轮询的方式接收到的。往客户提供的kafka服务器上的一个topic发送数据,这个topic有三个分区,客户反馈接收到的数据和发送端发送的实际数量对不上,他们只有一个分区接收到了数据,其他两个分区没有接收到。联调抓包发现一切正常。
2024-06-27 17:17:45 475
原创 postgre事务id用完后,如何解决这个问题
在PG中事务年龄不能超过2^31 (2的31次方=2,147,483,648),如果超过了,这条数据就会丢失。PG中不允许这种情况出现,当事务的年龄离2^31还有1千万的时候,数据库的日志中就会有如下告警:如果不处理,当事务的年龄离2^31还有1百万时,数据库服务器出于安全考虑,将会自动禁止任何来自任何用户的连接,同时在日志中是如下信息:(某个现场服务器的pg日志截图)然后我们去查看这个表的事务id。
2024-06-27 16:23:09 1300
原创 openssl版本冲突导致的崩溃(初稿)
而后修改makefile添加-Wl,–exclude-libs,ALL后才隐藏了libblowsnow_db.a里面所有的符号,重新编译UniAuditToSysLog替换后验证,发现模块可正常运行。提供一个centos的gdb包 gdb-7.6.1-120.el7.x86_64。执行rpm -ivh gdb-7.6.1-120.el7.x86_64 安装失败。重新执行rpm -ivh gdb-7.6.1-120.el7.x86_64。手动运行模块后,设置的路径下生成了core文件。
2024-04-03 18:27:05 353
原创 偶发odbc.ini文件被清空
1 排查用到了linux的监控服务 audit配置规则自行百度 发现我们的模块修改odbc.ini文件。2 排查了自己服务和链接的静态库的所有代码没有操作odbc.ini的代码,转而怀疑系统的odbc库。下载相应版本代码查看关键字 “odbc.ini” 发现了此处的代码。unixodbc官网地址–> https://www.unixodbc.org/现象:某个现场 odbc.ini 莫名其妙被清空,偶发情况,大概几周出现一次。对比下不同版本的代码还是很明显的能看出问题所在。
2023-08-02 20:28:57 422
原创 otl rlogon(...)连接失败的问题分析
某个客户现场部署的数据库是Oracle的,历史遗留原因,Oracle密码在配置文件里是明文的,客户要求修改为密文,修改后交由客户验证,客户反馈修改密码后,终端上报审计信息插入Oracle时,模块崩溃了,按理说密码即使不对或者解析问题也不会崩溃。不需要看实现细节,也能看出来根据’/’ '@'符号去切割的,当然官网也提供了更多的重载的接口(rlogon),并非一定要使用这种格式的接口,但是这种接口是更通用的,对于连接不同类型的数据库来说。rlogon()这个封装在最底层的接口是otl提供的,查看官网接口文档。
2023-04-10 14:39:12 468
原创 udp协议抓包 数据包内容编码验证
某天,一银行客户反馈,我们的数据传输模块发送过去的数据,他们接收到解析出来的乱码,问我们发送的数据到底是不是utf8
2022-12-08 10:25:39 403
原创 亚信/青藤云监控服务导致进程写文件卡死或异常缓慢的问题排查
系统日志/var/log/message,搜索模块的名字,发现了。通过这个inode,去查看我们日志文件的inode对比是相同的。
2022-09-28 17:40:27 800
原创 OTL Select with MySQL LONGTEXT in stream mode注意事项
3 官网文档给的例子,select这里没有设置set_commit(0),但是insert是有设置的,如果没有设置,程序运行会报错的,如下图。我们内部有封装代码,不过也是根据官网文档来的,链接:http://otl.sourceforge.net/otl3_ex128.htm。因为业务需求,web方面将字段text修改为mediumtext,同时也需要server方面来适配。4 此外还需注意的点,无论text/mediumtext/longtext类型的都需要将该字段放在语句的最后。............
2022-08-27 17:19:12 301
原创 关于postgre创建视图的语句中字段使用大写导致select失败的问题
现场使用的postgre版本忘记查了,但是不影响,只需要知道postgre有些版本大小写是不敏感的就行关于大小写不敏感1、创建视图语句CREATE OR REPLACE VIEW public.v_approval_results ASselecta.uidRecordID “uidRecordID”,a.uidApplyID “uidApplyID”,b.strUserName “strUserName”,b.strUserDesc “strUserDesc”,b.uiddeptid “
2022-03-14 17:43:29 701
原创 主备模式,备机ping主机每隔一段时间会有几分钟回包dup ack的问题
现场问题排查记录:现场反映的问题,每天早上会有部分用户正常认证成功,但是第三方无上线信息,导致无法访问外网,日志排查发现有个模块没有将登录信息发送到后台现场服务是主备模式的。后台的服务有一个模块是用来转发数据库通知给其他模块的。现在我们去查看负责转发模块的日志发现备机的转发模块每隔四小时和主机的其他模块断开连接一次,每次持续几分钟,几分钟后重新建立连接,在断开连接的时间点如早上9点,部分用户认证成功,但是这时候断开连接了,转发模块没有将信息发出去通知其他模块。怀疑是网络问题,让现场同事在断开连接的时间点
2021-12-29 14:28:27 970
原创 glibc中stl list::size()实现的延伸问题
STL glibc list的size方法所以仅仅是判断list容器是否有元素存在应该使用empty而不是list,避免进入复杂度为O(N)的重载函数中导致入坑bool empty() const { return _M_node->_M_next == _M_node; } size_type size() const { size_type __result = 0; distance(begin(), end(), __result); return __res
2021-11-05 10:28:40 176
原创 shared_ptr实现cow,解决多读少写并且读时占用锁时间很长的问题
上一篇文章中,我们使用gdb抓取堆栈分析了server运行,得出了结论。在某处抢占到读锁(对于共享资源map容器的保护,map的key为设备id,value为该设备的相关信息)时,获取设备相关信息,去进行过滤判断然后进行非常耗时的策略计算等操作,导致了其他线程在获取读锁或写锁时一直处于等待状态无法处理业务。并且总的来说是一个多读少写(相对少写)的情况。当前项目的处理 伪代码void dealtask(){ //并且这个读锁粒度太大了,当然还有其它业务也需要使用这个map,但并不是很费事的操作。不
2021-10-16 16:25:46 211
原创 gdb堆栈分析程序运行卡在哪里
反馈后台Server运行卡住,结合以往可能是死锁了或者某个锁已经被抢占了但是在进行某些操作时费时很久,导致其他锁一致在等待。gdb抓到的堆栈如下。大致浏览了一下,做了个分类:14 15 103 set_new_agent_msg_state —>重复的线程栈21-28 35 36 61 dec_agent_pushing_count —>重复的线程栈21 52 53 55 56 58-60 68-82 106-110 112 recv_agent_online —>重复的
2021-10-13 14:50:45 1180
原创 gdb调试 程序退出没有堆栈信息([Inferior 1 (process 12867) exited with code 0177])
上周有新任务开发,然后周五开发完了,和其他同事联调(不能远程调试),发现客户端上报给server之后,serever莫名其妙的就挂了,然后被重新启动(重启是自己设置的,只要进程不存在就回去启动程序),只要上报了新增的功能相关的,server就会挂掉,上报原来有的都是正常的。但是并不是被kill掉了,也不是崩溃了。因为程序里收到SIGSEGV和SIGABRT会打印堆栈信息到一个文件里面。但是没有发现有这个文件生成。后面给了一个抓堆栈的脚本,然后那边同事抓给我的结果是文件为空。我以为没抓到,然后看了下日志,s
2021-09-14 19:32:45 4805
原创 ida pro分析elf文件(linux程序)
IDA Free: https://hex-rays.com/ida-free/#download客户反馈的日志,可以看到FROM tbl_ud_pe_eventreport_network_sum limit 0 offset 1188 part F436B5F1BCEA75FB204A64C83EF4C90D7执行语句报错了。[1597725][2021-08-18][12:03:35][T1096963840][HQueryDB.cpp ][0303][I]query_acuta_
2021-08-18 19:54:34 1164
原创 heapprofile对程序做内存分析
(1)下载gperftools(2)编译的时候最后链接libtcmalloc.a ../../../gperftools-master/libtcmalloc.a(3)启动的时候设置环境变量 nohup env HEAPPROFILE=/tmp/ ./server & (HEAPPROFILE+.xxx.heap -> .heap文件的位置)(4)在启动完,打算开始检测的时候调用 (以下两个函数所在的头文件 gperftools-master/src/gperftools/
2021-07-02 11:28:00 1573 1
原创 linux 内存不足导致的编译失败
g++: internal compiler error: Killed (program cc1plus)编译报错,估计很多人都写过这样的博客,但我今天也确实遇到了,编译UniServer模块的时候总是挂了,还是记录一下吧编译不成功,内存不足导致,增大交换区大小,如下:sudo dd if=/dev/zero of=/swapfile bs=64M count=32#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=2048MBsudo mkswap
2021-05-08 22:28:55 1909
原创 doctotext源码遇到的一些问题及解决方案
如果你想在linux进行多种文件类型的文件文本内容的提取,doctotext是一个很好的开源库。github:https://github.com/tokgolich/doctotext当然了官方在多年前已经停止更新这个开源库了,并且如果你仔细阅读源码,会看到部分TODO,就是还有很多可以完善的地方。另外说明:我对于这么多文件类型格式并不那么了解和熟悉,本文只是将遇到过的相关问题做个描述,以及个人意见,主要是让有需要的人不要踩类似的坑,如果是对于文件格式了解的大佬,有错误处还望多指教先说下我看到的源
2021-04-28 23:44:52 1510
原创 stl random_shuffle
template <class RandomAccessIterator> void random_shuffle (RandomAccessIterator first, RandomAccessIterator last);template <class RandomAccessIterator, class RandomNumberGenerator> void random_shuffle (RandomAccessIterator first, RandomAc
2021-04-15 19:08:33 185
原创 关于堆栈的面试题
两个栈实现一个队列思路:入队只需要向s1中压栈即可,出队判断s2是否为空,不为空则pop,为空则将s1出栈然后压入s2,接着再pop即可(对于各种插入删除,自行画图排除即可),这时如果s1也为空则抛异常两个队列实现一个栈思路:入栈全部向q1入队,出队则是将q1中数据出队,然后出队的元素插入q2,直到队列q1只剩最后一个元素,直接删除(即栈顶元素),此时变为q2存储数据,q1为空。一直重复class Solution {public: bool validateStackSequen
2021-03-31 20:29:25 355
原创 二叉树的先中后非递归遍历,以及树的高度和叶子节点求解等面试题
利用栈容器可以实现二叉树的非递归遍历首先将每个节点都设置一个标志,默认标志为假,根据节点的的状态进行如下流程。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>#include"seqstack.h"//树的节点类型typedef struct node{ int flag; //数据域 char ch; //指针域 st
2021-02-14 18:24:55 112
原创 C++ 关键词过滤,屏蔽应用
关键词过滤–延伸多关键词过滤(业务需求)首先最笨的方法是每个关键词完整的存放在一个容器中,文本内容解析完传过来的时候进行过滤,那么这种方法要对每一个关键词做一次完整比对,不相同则比较下一组,这种最坏的情况为每匹配到一个关键词都要匹配关键词个数的次数。在文本中关键词出现频率较高时,需要检查的文件个数较多时,效率很差。所以我们把多关键词构建成类似树状结构,对于每一个关键词只需要遍历查找一次(从根节点到终端节点为一个关键词,终端节点中成员key(用来判断是否找到关键词)保存完整的关键词)百度了一下这种应该
2021-02-05 17:20:11 947 1
原创 base64编码解码的模板实现
可能平时看到的都是这种直接取6位的,不管有没有形式变化。这也是大家最容易想到的 for(i=0,j=0;i<len-2;j+=3,i+=4) { res[i]=base64_table[str[j]>>2]; //取出第一个字符的前6位并找出对应的结果字符 res[i+1]=base64_table[(str[j]&0x3)<<4 | (str[j+1]>>4)]; //将第一个字符的后位与第二个字符的前
2020-11-26 16:15:05 266
原创 SQLite Expert Professional授权许可文件(license4.key)
支持SQLite Expert Professional 5.2/5.3 x64版本,亲测有效https://www.eatm.app/archives/653.html
2020-10-30 10:49:52 3499 2
原创 libofd源码部分错误的修改
libofd:https://github.com/uukuguy/libofd提取OFD文件内容不包括嵌入图片内容,仅仅是文档内容源代码下载完后安装完所有的依赖之后发现编译完后测试给定的ofd文件用例时
2020-09-25 18:09:45 1466 1
原创 TOTP动态令牌(基于openssl/HAMC)
思路:获取当前的时间戳模60(一分钟内任意时刻的时间戳模上60为固定的值),使用HMAC得到摘要,摘要进行位运算处理得到6位的动态口令TOTP.hppd#ifndef __TOTP_H#define __TOTP_H#include <iostream>#include <sstream>#include <string>#include <vector>#include <ctime>#include <iomanip&
2020-09-18 23:31:14 1462
原创 nlohmann/json中所有异常类型说明
https://fossies.org/linux/mkvtoolnix/lib/nlohmann-json/include/nlohmann/detail/exceptions.hpp以下为exceptions.hpp头文件我们需要的是type_error.316翻译:dump函数仅适用于UTF-8编码的字符串;也就是说,如果为JSON值分配“std::string”,请确保它是UTF-8编码的事实上nlohmann/json这个库只支持UTF-8编码,如果储存了非UTF-8编码的字符串在调用du
2020-08-27 11:33:12 17471 5
原创 Linux 程序获取硬件信息 HardWare LiSter源码修改适配
lshw源码包下载地址:https://www.ezix.org/download/?package=lshw.ezix.org功能与lshw命令相同,但是我们可以通过修改源码的方式更加灵活的获取我们想要的信息。(解压后直接make,然后进入src/目录执行./lshw获取电脑的硬件信息包括内存,主板,CPU,硬件,网卡,显卡,声卡等等信息)源码编译后执行lshw和命令lshw结果是一样的lshw命令如下(看得到信息非常详细但是对于不同的需求来说要求是不一样的,这些信息已经有些冗余了对我来说):d
2020-08-05 11:18:45 1313
原创 linux pkexec以root身份运行基于qt的应用程序
接上篇在登录用户为普通用户的情况下,因为我们需要弹窗来供用户输入,以root身份是不需要输入密码的,下面碰到的情况是以普通用户运行时碰到的情况以 pkexec /home/jin/work/ConfidentialCheckSystem/Client运行我们的客户端jin@jin:/tmp$ pkexec /home/jin/work/ConfidentialCheckSystem/Client QXcbConnection: Could not connect to display 已放弃 (核
2020-07-17 15:52:13 4558 1
原创 linux pkexec允许授权用户以其他身份执行程序
ubuntu官方开发网站 http://manpages.ubuntu.com/pkexec命令(详细介绍见如下网址)http://manpages.ubuntu.com/manpages/bionic/man1/pkexec.1.htmlpkexec 以其他用户身份执行的命令pkexec [--user username] PROGRAM [ARGUMENTS...]pkexec允许授权用户以其他用户身份执行PROGRAM。如果用户名不是指定,则程序将以管理超级用户root身份执行。成功完
2020-07-16 15:02:28 11203 10
原创 rpm查询已安装软件详细信息
rpm -qa --queryformat “%{NAME} %{VERSION} %{SUMMARY} %{INSTALLTIME} %{URL}\n”–queryformat提供更多输出选项rpm --querytags查看标签列表如以下:RPMTAG_NAMERPMTAG_VERSIONRPMTAG_RELEASERPMTAG_EPOCHRPMTAG_SUMMARYRPMTAG_DESCRIPTIONRPMTAG_BUILDTIMERPMTAG_BUILDHOSTRPMTAG_I
2020-06-30 09:21:45 1396
原创 ubuntu ufw开放端口
root@VM-0-14-ubuntu:/etc# ufw enableCommand may disrupt existing ssh connections. Proceed with operation (y|n)? yFirewall is active and enabled on system startup//允许外部访问10086端口(tcp/udp)root@VM-0-14-ubuntu:/etc# ufw allow 10086Rule addedRule added (v6
2020-06-04 23:33:54 2802
原创 vector容器at访问报错以及operator[]
初始化3个int型大小的元素,不清空,at正常访问#include <iostream>#include <vector>using namespace std;int main(){ vector<int> v(3); //v.clear(); v.at(1) = 10; cout << v[0] << ":" << v[1] << ":" << v[2]; return 0;}初始
2020-06-02 11:10:59 4083
原创 链表相关题目整理
求链表的倒数第k个节点思路:两个指针,第一个指针先走k-1步,然后两个指针同时移动,当第一个指针走到尾节点时,第二个指针指向的就是倒数第k个节点两个有序链表的合并思路:求出两条链表的交点思路:...
2020-05-31 22:41:18 78 1
原创 包含中文的URL或者文件路径的编解码
/*这里的内容是处理%20之类的东西!是"解码"过程。%20 URL编码中的‘ ’(space)%21 ‘!’ %22 ‘"’ %23 ‘#’ %24 ‘$’%25 ‘%’ %26 ‘&’ %27 ‘’’ %28 ‘(’…相关知识html中的‘ ’(space)是 */void strdecode(char *to, char *from){ for ( ; *from != '\0'; ++to, ++from) { if (from[
2020-05-20 00:43:09 675
原创 Linux flock实现单进程启动
#include <sys/file.h>#include <unistd.h>#include <fcntl.h>#include <opencv2/opencv.hpp>#include <boost/filesystem.hpp>#include "Logger.h"using namespace std;usin...
2020-05-07 11:34:54 309
原创 Linux readlink与/proc/self/exe
ssize_t readlink(const char *path, char *buf, size_t bufsiz);/proc/self/exe是一个符号链接,代表当前程序的绝对路径用readlink读取/proc/self/exe可以获取当前程序的绝对路径std::string GetCurrentDir(const std::string& strSubPath){ ...
2020-05-06 16:39:25 2301
原创 队列实现(广度优先遍历文件)
#include <iostream>#include <string.h>#include <queue>#include <sys/types.h>#include <dirent.h>using namespace std;void *widfirsearch(const char* pathname){ prin...
2020-04-23 22:30:38 403
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人