datafiller.c
来自「网络流量生成工具,开源软件,也可以作为网络流量检测软件使用」· C语言 代码 · 共 82 行
C
82 行
/* * $smu-mark$ * $name: datafiller.c$ * $author: Salvatore Sanfilippo <antirez@invece.org>$ * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$ * $license: This software is under GPL version 2 of license$ * $date: Fri Nov 5 11:55:47 MET 1999$ * $rev: 8$ */ #include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h> /* memset */#include "hping2.h"#include "globals.h"void datafiller(char *p, int size){ static int fd = 0; int readed, diff; if (!fd) { fd = open(datafilename, O_RDONLY); if (fd == -1) { perror("[datafiller] open()"); fd = 0; /* will retry to open the file for the next packet */ memset(p, 'X', size); return; } } if (p == NULL && fd != -1) /* seek operation */ { /* size-1 because packet with id 1 start from 0 */ lseek(fd, (data_size-signlen)*(size-1), SEEK_SET); return; }restart: /* if EOF occurs, after rewind, restart */ readed = read(fd, p, size); if (readed == size) { return; } else if (readed == -1) { perror("[datafiller] read()"); close(fd); fd = 0; /* will retry to open the file for the next packet */ memset(p, 'X', size); return; } else if (readed < size && opt_end == FALSE) { lseek(fd, 0, SEEK_SET); if (readed == 0) goto restart; } else if (readed < size && opt_end == TRUE) { fprintf(stderr, "EOF reached, wait some second than press ctrl+c\n"); eof_reached = TRUE; } else { printf("[datafiller.c INTERNAL ERROR] readed = %d - opt_end == %d\n", readed, opt_end); exit(1); } diff = size - readed; memset(p+readed, '\0', diff); /* padding */ lseek(fd, 0, SEEK_SET); return;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?