資源簡介
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“
??????????
評論
共有 條評論