FIFO阻塞读写

pipe一般都要和fork结合起来用,所以多进程都是基于一个主进程产生的,有一定的关联性,假如两个毫无相关的进程要进行进程间通信,命名管道可以实现;一个进程向FIFO写数据,另一个进程从FIFO读取数据

为了保持原子操作,可以通过阻塞方式来打开FIFO,就算只有一个读进程或者只有一个写进程存在,也会阻塞住等待对应的另一个进程的出现

打开FIFO的方式有下面几种:

open(const char *p[......]

Read more

True-Client-IP和X-Real-IP

网络数据包千奇百怪,特别是7层HTTP信息,我膜拜一下,再一次重新读一遍这个全称Hypertext Transfer Protocol,超文本传输协议

一个真实的用户,通过了几层代理服务器的话,HTTP头部有可能会放一个X-Forwarded-For域,可以查到真实的IP,今天又碰到了另两个类似名字的域

True-Client-IP

根据这个域的名称,我觉得应该代表的就是用户的真实IP,假如经过了[……]

Read more

Linux下离线分析网络数据包2~7层信息脚本

两年前为了更好验证正确性,刚摸PERL,写的一个数据包分析脚本,整体还是比较弱的,缺少了perl的任性

这个脚本优点有:

1:基本能将wireshark的命令行程序tshark的所有用法都揽括在内了,再也不用担心不会命令了

2:离线能够分析链路层,IP层,TCP层以及HTTP层的相关信息,并以文件方式储存起来

3:由于输入是一个文件列表,所以可以一次性处理多个数据包文件,每个文件信息分开储存起来

[……]

Read more

离线分析数据包文件端口流量以及占比脚本

在验证正确性的时候,时常要统计指定端口的流量,也就是frame length,这里是一个简单的PERL程序,将打印所有的端口流量,以及流量所占比例,可以在Linux系统下安装有tshark的环境下运行

#!/usr/bin/perl
##########################################
##input:
##  trace file list
##output:
##[......]

Read more

命名管道FIFO

fork出来的进程通过普通管道pipe传递数据,而这些进程他们最先都是由一个主进程给构造出来的,也就是有相关性,而如果是想在完全不想关的进程之间传输数据,Linux下可以通过一种特殊的文件来完成,命名管道,它在文件系统中是以文件名的形式存在的

命令行创建命名管道:

[lihui@localhost ~]# mkfifo one
[lihui@localhost ~]# ll one
prw-r--r[......]

Read more

Memory Leak检测工具dmalloc

今天大家都在怀疑系统可能有memory leak,于是我准备用内存检测工具测试一把,valgrind由于还要修改的source code比较多,就下了3年前曾经用过的另一个工具dmalloc,由于用过,所以信心满满 ,可惜太失望了

1:下载,最新版也是几年前的

wget http://dmalloc.com/releases/dmalloc-5.5.2.tgz

2:安装

tar zxvf dmallo[......]

Read more

pipe和fork

管道看上去也就创造了两个文件描述符,能够读写,好像没能体现出应有的价值,但是假如是要进程间通信,传递数据的时候,只要管道打开的两个文件描述符存在,通过调用fork创建子进程,那么两个进程可以通过管道传递数据,才是真正有用的时候

调用pipe之后,接着调用fork,这样就创建了由主到子(或者子到主)的通道,但是fork之后进程做什么就决定了数据流的方向,下面的简单例子就是从子进程到主进程的方向

#in[......]

Read more

memset

将buffer所指的内存区域的前count个字节用字符ch替换,对于较大的结构体或者数组清零是个不错的操作

#include <string.h>

void *memset(void *s, int ch, size_t count);

实际上作用就是在一段内存块中填充某个给定的值,比如下面小例子:

#include <stdio.h>
#include <string[......]

Read more