自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 资源 (3)
  • 论坛 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 linux内核驱动编写,读取网络数据包,加载到设备文件

作用:编写linux内核驱动程序,驱动程序读取网络数据包,对数据包进行解析,将tcp五元组加载到设备文件中,对设备文件数据进行读取写入到临时文件。读取tcp数据包源码://print_tcp.c#include <linux/module.h>#include <linux/netfilter.h>#include <linux/netfilt...

2019-12-20 10:17:30 381 1

原创 Linux内核数据包格式

LInux kernel中MAC头,IP头,TCP头结构体定义,内核打印方式。MAC头://内核中MAC头结构体#defein ETH_ALEN 6struct ethhdr { unsigned char h_dest[ETH_ALEN]; //48位目的MAC地址 unsigned char h_source[ETH_AL...

2019-12-06 14:09:40 149

原创 解决无网络环境下getaddrinfo引发的超时问题

问题背景:源码中在调用getaddrinfo时,如果是网络正常的环境下,getaddrinfo返回会很快,但如果无网络,机器就无法进行dns解析,从而导致getaddrinfo返回时间高达1-2分钟以上。解决方案:使用多线程执行getaddrinfo源码如下://add by xdlstruct stu_dns_info{ LPCSTR node; LPCSTR servname; struct addrinfo *hints; struct add

2021-09-26 09:10:12 12

原创 cJSON构造与解析json

参考:http://blog.sina.com.cn/s/blog_a6fb6cc90101ffme.html

2021-06-11 14:43:25 49 2

原创 portSentry入侵检测工具

1、下载portSentry源码网址:https://sourceforge.net/projects/sentrytools/files/latest/download2、

2021-06-09 15:32:57 78 1

原创 二分查找

有序数据,若无序,需要先排序。非递归:#include <stdio.h>#include <string.h>#include <stdlib.h>void binarySearch(int a[], int value , int low, int high){ while(low <= high) { int mid = (high + low)/2; if(a[mid] == value.

2021-04-23 13:40:22 10

原创 顺序查找

#include <stdio.h>#include <string.h>#include <stdlib.h>void sequenceSearch(int a[], int length, int k){ int i = 0; for(i = 0; i < length; ++i) { if(a[i] == k) printf("i:%d\n", i); } retur.

2021-04-23 11:22:43 10

原创 插入排序

#include <stdio.h>#include <string.h>#include <stdlib.h>void insertSort(int a[5], int length){ int i, j = 0; for(i = 1; i < length; ++i) { int temp = a[i]; for(j = i - 1; j >= 0; --j) { .

2021-04-22 17:03:31 4

原创 选择排序

#include <stdio.h>#include <string.h>#include <stdlib.h>void selectionSort(int a[5], int length){ int i, j = 0; int min = 0; for(i = 0; i < length -1 ; ++i) { min = i; for(j = i + 1; j < length.

2021-04-22 16:28:48 10

原创 冒泡排序

#include <stdio.h>#include <string.h>#include <stdlib.h>void bubbleSort(int a[5], int length){ int i, j = 0; for(i = 0; i < length - 1; ++i) { //for(j = 0; j < length - 1; ++j) for(j = 0; j < len.

2021-04-22 15:55:16 8

原创 问题记录

场景:java端调用阿里云api创建vps机器,创建成功后,会拉起C程序。此时,C程序被拉起后,发现程序中某些system执行的命令无法正常执行。比如system("service sshd restart"); 目的是想重启sshd服务,但获取system返回值时,返回的不是0值,表示命令执行了,但执行没有成功。程序中很多调用system的地方都出现了这样的问题。最终解决办法是绕过使用“service sshd restart”执行,而是通过杀进程,然后执行“/use/sbin/ssh...

2021-03-15 16:02:12 15

原创 centos环境搭建kippo蜜罐

kippo配置文件中默认监听的端口是2222,本文会将22端口的数据转发到2222端口,这样当有用户访问22端口的数据时,会访问到kippo 的2222端口。第一步:安装工具包yum -y install gcc python-develyum -y install python-pippip install pyasn1pip install twisted==15.2.0pip install pycrypto第二步:修改/etc/ssh/sshd_config配置文件中的

2021-03-15 15:56:38 139

转载 线上服务CPU100%问题快速定位实战

功能问题,通过日志,单步调试相对比较好定位。性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布出来,希望对大家也有帮助。题目某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。问:如何定位是哪个服务进程导致CPU过载,哪个线...

2021-01-11 11:15:04 40

原创 C-获取当前时间

#include <stdio.h>#include <time.h>int main(){ time_t nowtime; struct tm* p;; time(&nowtime); p = localtime(&nowtime); char time[30] = ""; sprintf(time, "%04d-%02d-%02d %02d:%02d:%02d", p->tm_year+1900, .

2021-01-08 17:04:01 59

原创 获取socket客户端的IP

场景:服务端建立socket后,需要知道是哪些客户端IP在发起请求,可以对请求的客户端进行限制等操作。/*获取客户端的IP*/#define NIPQUAD(addr) \((unsigned char *)&addr)[0], \((unsigned char *)&addr)[1], \((unsigned char *)&addr)[2], \((unsigned char *)&addr)[3]client_sockfd = accept(serv

2021-01-08 17:00:09 492

原创 C语言-日志打印

#include <stdio.h>#include <string.h>#include <time.h>#include <stdarg.h>#define MINLEN 128#define RET_ERROR 0const char LOGFILEDIR[MINLEN] = "/tmp/tmp";/**************************************************************** * *.

2021-01-08 10:54:54 172

原创 tcp socket

//server.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <string.h>#define PORT 4321#define MAX_QUE_CONN_NM 5#define MAXLEN 1024#define RET_OK.

2021-01-07 18:33:41 66 1

原创 socket connect超时设置

场景:客户端调用接口时,默认调用的超时时间会很长,可以通过设置发送的超时时间来控制。int create_server_socket(const char *node_ip, int port){ int sockfd; int sendbytes; char buf[MIDLEN] = ""; struct hostent* host; struct sockaddr_in server_addr; if ((sockfd = socket(AF_INET, SOCK_STREAM

2021-01-07 18:20:57 90

原创 socket端口复用

场景:socket监听端口后,程序异常退出,导致端口TIME_WAIT,再次拉起程序时,由于当前端口尚未释放,导致启动的程序占用了其他端口。解决办法:///允许重用本地地址和端口:///这样的好处是,即使socket断了,调用前面的socket函数也不会占用另一个,而是始终就是一个端口///这样防止socket始终连接不上,那么按照原来的做法,会不断地换端口。/*端口复用*/int opt = 1;setsockopt(sockfd, SOL_SOCKET, SO_RE...

2021-01-07 18:12:55 146

原创 socket epoll模型

linux 使用epoll主要目的是啥 为了实现非阻塞么?socket本来就有阻塞和非阻塞两种模式,与epoll无关。epoll是针对多socket操作(从select升级到poll再到epoll都是解决这个目的)。如果不用poll方法,在阻塞模式下,操作多socket,要么用多线程,要么用多进程,都会带来一定的开发复杂度和性能降低。在非阻塞模式下,就要使用轮询,浪费处理能力很厉害。所以,epoll是为了让程序只在一个线程中就能操作大量socket而提供的一个核心功能,同时还提供了很高的处理

2021-01-07 18:08:01 102

原创 shell传输文件、远程执行命令

使用sftp传输文件:读取ip.txt中的ip数据,连接后传输文件#!/bin/bashcat ip.txt | while read linedo echo $line lftp -u root,password sftp://$line:22 <<EOF rm -rf aaa.tar put aaa.tar byeEOFdone使用expect,ssh登录服务器,执行命令:#!/bin/bashcat ip.txt | wh

2021-01-07 13:31:45 374

原创 shell sed用法

删除文件中某个字段的一行:sed -i '/config.role/d' /root/aaa.conf在查找字段的下一行添加数据://在role的下一行添加config.role = 'internal';sed -i "/role/aconfig.role = 'internal';" /root/aaa.conf删除第几行的数据:sed -i "16 d" /etc/ppp/options.xl2tpd.client在第几行插入数据:sed -i "15 i

2021-01-07 13:10:31 28

原创 linux上iptables nat端口转发数据

场景:C机器想发送数据到B,但它不知道B机器的IP,只能通过A进行转发。也就是数据C->A->B,这种情况下,就可以在A机器上设置nat转发,将C机器发往A机器的数据转发到B机器上去。这里要注意的一点是,我这边A、B之间建立了VPN,这样如果A机器改变了IP地址,B上面的设置不需要进行改动。但效果是一样的,都是为了实现数据转发。将发到本机udp 24082端口的数据,转发到192.168.100.10的24082端口iptables -t nat -A PREROUTI..

2021-01-07 11:52:14 116

原创 linux使用openssl加密压缩文件

压缩:filename为文件名,password为加密密码tar -zcf - filename |openssl des3 -salt -k password | dd of=filename.tar.gz解压:dd if=filename.tar.gz |openssl des3 -d -k password | tar zxf -

2021-01-07 11:35:22 202

原创 linux上程序设置开启自启动

我常用的一种方式是:将执行命令写入到/etc/rc.d/rc.local文件中,并且赋予执行权限。这样即可实现机器重启后自动启动程序的效果。

2021-01-07 11:32:43 23

原创 shell写入crontab数据

需要在程序中添加crontab,执行shell命令来实现:(echo "* * * * * sh /root/proxy/pull_server.sh >> /dev/null 2>&1" ; crontab -l ) | crontab

2021-01-07 11:30:10 400

原创 centos环境搭建pptp服务器

pptp安装1、安装pppyum install -y ppp2、安装pptpdyum install -y pptpd3、修改/etc/pptpd.confoption /etc/ppp/options.pptpdlogwtmplocalip 192.168.11.1remoteip 192.168.11.10-1004、修改/etc/ppp/options.pptpd文件name pptpdrefuse-paprefuse-chaprefu

2021-01-06 18:53:44 276

原创 linux下安装mysql

参考:https://www.jianshu.com/p/276d59cbc529C语言调用mysql语句:https://www.cnblogs.com/zhidongjian/p/10097842.htmlhttps://www.cnblogs.com/lywy510/p/3615710.html参考:https://blog.csdn.net/fy_1852003327/article/details/1058904941、下载rpm包wget http://dev..

2021-01-06 18:41:21 21

原创 快速排序

快速排序原理:选取一个数作为基准数,一般选取第一个数,大于基准数的数据放到基准数的后面,小于基准数的数据放到基准数的前面,第一次排序完成之后,基准数的前面都是小于其的数,后面都是大于其的数。然后将前面、后面的数据分别作为一个新的序列按照这种方式重新排序。比如一段数据:6,1,2,7,9,3,4,5,10,8数据6作为基准数,选取i,j变量,j从后往前查找,找到第一个小于6的数据,这里是5,i从前往后查找,找到第一个大于6的数据,这里是7,将5,7交换位置。6,1,2,5,9,3,4.

2021-01-06 18:33:45 25

原创 单链表

/*** 说明:本程序实现了一个具有头结点的单链表。*/#include "stdio.h"#include "stdlib.h"#include "malloc.h"//5个常量定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1//类型定义typedef int Status;typedef int ElemType;//测试程序长度定义#define LONG.

2021-01-06 18:32:11 83

原创 数据结构-用数组实现栈

栈结构体:数组或者指针,用于存放栈数据,指针的话需要分配空间栈顶位置,用于记录当前栈顶在哪栈的大小typedef struct{ ElemType *elem; int top; int size;}STACK_SQ;//初始化栈,给栈分配空间,初始值,成功返回true,出错返回falsebool InitStack(STACK_SQ &sq, int size);//入栈,需要判断是否已达栈顶,如果达到栈顶,退出。成功返回true,出错

2021-01-06 18:28:30 28

原创 windows使用接口添加路由

场景:windows需要添加大量的主机路由时,使用route add命令执行会很慢,于是考虑使用windows系统接口进行路由添加。接口函数:CreateIpForwardEntry#ifndef WIN32_LEAN_AND_MEAN#define WIN32_LEAN_AND_MEAN#endif#include <windows.h>#include <winsock2.h>#include <iphlpapi.h>#include

2021-01-06 17:59:16 400

原创 windows cmd修改注册表

注册表中增加一个项,已经存在的的话会覆盖reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config /v MaxPosPhaseCorrection /t REG_DWORD /d 54000 /f

2021-01-06 17:53:12 628

原创 MFC引入第三方库

比如:MFC引入openssl库文件1、下载openssl windows版本,获取到include文件和lib文件2、MFC工程属性页中增加头文件目录3、属性页中链接器增加lib目录4、代码中增加头文件和动态库,完成...

2021-01-06 17:49:19 334

原创 TCP/IP协议

TCP/IP是一类协议系统,它是用于网络通信的一套协议集合。TCP/IP被认为是一个四层协议网络接口层:各种物理通信网络接口网络层:IP,ICMP,ARP,RARP传输层:TCP,UDP应用层:FTP,TELNET,HTTP,SMTP,DNS等网络接口层:主要是指物理层次的一些接口,比如电缆,双绞线等网络层:IP协议,ICMP协议,IGMP协议,主要是提供独立于硬件的逻辑寻址,实现物理地址和逻辑地址的转换。传输层:TCP协议,UDP协议,为网络提供了流量控制...

2021-01-06 16:02:11 130

原创 网络分层

物理层:a、传输数据的单位:比特b、数据传输系统:源系统(源点、发送器)->传输系统->目的系统(接收器、终点)通道:a、单向通道(单工通道):只有一个方向通信,没有反方向交互,如广播b、双向交替通信(半双工通信):通信双方都可发消息,但不能同时发送或接收c、双向同时通信(全双工通信):通信双方可以同时发送和接收信息通道复用技术:a、频分复用(FDM,Frequency Division Multiplexing):不同用户在不同频带,所用用户在同样时间占...

2021-01-06 15:58:30 25

原创 问题记录

场景:java端调用阿里云api创建ecs机器,创建完成之后会拉起我这边用C语言写的程序。该程序中有一步是启动pptp服务。问题是通过调用java端启动的程序,一直无法拉起pptpd服务,手动杀掉程序,然后再启动就没有问题。如:system("service pptpd restart"); 这样是无法启动的。system("service pptpd restart & >/dev/null 2>&1"); 这样也无法启动system("servi...

2021-01-05 12:19:48 97

转载 数字签名

转自:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html数字签名是什么?1、鲍勃有两把钥匙,一把是公钥,另一把是私钥。2、鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。3、苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。4、鲍勃收信后,用私钥解密,就看到了信件内容。这样要强调的是,只要鲍勃的私钥...

2020-12-31 13:23:00 31

转载 密码学

文章转自:http://www.ruanyifeng.com/blog/2006/12/notes_on_cryptography.html1、加密方法可以分为两大类。一类是单钥加密,还有一类叫做双钥加密。前者的加密和解密过程都用的同一套密码。后者的加密和解密过程用的是两套密码。历史上,人类的加密方法都是前一种,比如二战期间德军用的Enigma电报密码。莫尔斯电码也可以看作是一种私钥加密方法。2、在单钥加密的情况下,密钥只有一把,所以密钥的保存变得很重要。一旦密钥泄漏,密码也就被破.

2020-12-31 10:36:42 69

原创 进程间通信-信号量

1、信号量信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),它和管道不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。临界资源:具有排他性的资源临界区:访问临界资源的代码段2、信号量的工作原理由于信号量只能进行两种操作,等待和发送信号,即P, V操作:P操作:上锁,如果计数器的值大于0,就减1;如果它的值为0,就挂起该进程的执行..

2020-12-30 18:19:41 52 1

cJSON源码,用于C语言json数据的构建与解析

cJSON源码,用于C语言json数据的构建与解析

2021-06-11

openvas9源码+依赖包源码

openvas9源码以及各种依赖包源码,便于研究openvas9。

2019-01-07

Linux技术文档.zip

鸟哥的Linux私房菜 基础学习篇(第三版)、鸟哥的私房菜

2019-06-11

tcp层是如何确认应用层协议是什么的?

发表于 2020-03-06 最后回复 2020-03-06

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除