• 大小: 13KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: C/C++
  • 标签: Linux  发包  sendpkt  

资源简介

Linux下发包程序的实现。支持以指定的发包速率、发包网卡及指定的源数据包文件发送数据报文。同时支持 pcap 格式或 cap 格式数据包的发送。 编译此程序前需先安装 libpcap

资源截图

代码片段和文件信息

// 以指定的发包速率、发包网卡及指定的源数据包文件发送数据报文。
// 同时支持 pcap 格式或 cap 格式数据包的发送
// 编译此程序前需先安装 libpcap
// 作者: peixw
// 交流QQ: 251207612

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define  RET_PARA_ERROR                 (1)
#define  RET_CTRL_C                     (2)
#define  RET_SEND_ERROR                 (3)

#define  TEN_EXP_SIX                    (1000000UL)
#define  MTU_PAD_UNIT                   (4)

#define  PKT_T_CAP                      (0)
#define  PKT_T_PCAP                     (1)
#define  PKT_T_INVALID                  (-1)

#define  SIZE_64B                       (1U<<6)
#define  SIZE_128B                      (1U<<7)
#define  SIZE_2K                        (1U<<11)
#define  SIZE_8K                        (1U<<13)
#define  DEFAULT_MTU                    (1500)
#define  MAX_frame_LEN                  (1600)

struct timeval g_stTimevalStart;
static unsigned long long g_ullSendSize = 0;
static unsigned long long g_ullSendPacks = 0;
static char g_szEthDriver[16] = {0};
static int g_iMtuMofified = 0;

// 打印统计信息
void PrintStatInfo(void)
{
    u_long ulDiffUsec = 0;
    struct timeval stTimevalNow;
    u_long ulActualSpeed = 0U;
    double dActualSpeed = (0.0);

    if (0 != gettimeofday(&stTimevalNow NULL))
    {
        perror(“gettimeofday“);
        return ;
    }

    printf(“Send finished!\n----------------------------------------------\n“);
    char szTimeInfo[SIZE_64B] = {0};
    time_t ttInfo;
    ttInfo = g_stTimevalStart.tv_sec;
    (void)ctime_r(&ttInfo szTimeInfo);
    printf(“Start\tTime:\t%s“ szTimeInfo);

    memset(szTimeInfo 0 sizeof(szTimeInfo));
    ttInfo = stTimevalNow.tv_sec;
    (void)ctime_r(&ttInfo szTimeInfo);
    printf(“Stop\tTime:\t%s“ szTimeInfo);

    u_long ulDiffSec = (stTimevalNow.tv_sec - g_stTimevalStart.tv_sec);

    ulDiffUsec = stTimevalNow.tv_usec - g_stTimevalStart.tv_usec;

    if(ulDiffUsec < 0)
    {
        ulDiffUsec += TEN_EXP_SIX;
        --stTimevalNow.tv_sec;
    }

    ulDiffUsec += ulDiffSec * TEN_EXP_SIX;
    dActualSpeed = (double)g_ullSendSize / ulDiffUsec;
    dActualSpeed *= 8;

    ulActualSpeed = (u_long)(dActualSpeed * TEN_EXP_SIX);

    printf(“Total\tSend:\t%llu Bytes\n“ g_ullSendSize);
    printf(“Time\tCost:\t= %lu(sec) = %lu(usec)\n“ ulDiffSec ulDiffUsec);

    printf(“Actual Speed:\t= %ld b/s“ ulActualSpeed);
    if(ulActualSpeed)
    {
        ulActualSpeed >>= 10;
    }

    if(ulActualSpeed)
    {
        printf(“ = %ld Kb/s“ ulActualSpeed);
        ulActualSpeed >>= 10;
    }

    if(ulActualSpeed)
    {
        printf(“ = %ld Mb/s“ ulActualSpeed);
    }
    printf(“\nSended\tPack:\t%llu\n“
           “----------------------------------------------\n“
          

评论

共有 条评论