?
正好公司為了檢測前臺網絡,力圖收集有力證據與某CDN PK,所以隨手寫了一個群PING的程序。
寫的內容比較簡單,沒有去特別追求線程效率,也沒有去用LINUX 2.6+的殿堂級神器,以追求實現效率為主,一些參數大家可以自己調。
同事后來幫忙補了些日志處理,當然如果有興趣的,還可以直接與AS3做SOCKET展示。
大致的源碼如下:
#Linux REHL 6,x64,4C/32G,GCC
#define MAXTD 2
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
char IP[230][30];
char *PINGI=NULL;
char *PINGC=NULL;
char *PINGS=NULL;
void *dmlog();
int main(int argc,char *argv[])
{
FILE *fp=NULL;
char *tmpstr=NULL;
char *ipraw;
pthread_t dm[230];
pthread_attr_t attr={0};
int t=0;
if(argc!=4)
{
printf("Not Enough Parameters!,GoodBye Exit(0)!\n");
printf("Or you can try example below:\n");
printf("ping 1 5 300 \n");
printf("Just 1 mens interval\n");
printf("5 means 5 packets\n");
printf("300 menas 300 packet size\n");
exit(0);
}
printf("%s\n",argv[1]);
printf("%s\n",argv[2]);
printf("%s\n",argv[3]);
fp=fopen("./ping.cnf", "r");
PINGI=(char*)malloc(sizeof(char)*10);
PINGC=(char*)malloc(sizeof(char)*2);
PINGS=(char*)malloc(sizeof(char)*10);
tmpstr=(char*)malloc(sizeof(char)*30);
ipraw=(char*)malloc(sizeof(char)*30);
strcpy(PINGI,argv[1]);
strcpy(PINGC,argv[2]);
strcpy(PINGS,argv[3]);
pthread_attr_init (&attr);
pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
printf("Here Start Ping Test\n");
printf("Create Thread\n\n\n");
while(fgets(tmpstr,100,fp)!=NULL)
{
sscanf(tmpstr,"%[^\n]",ipraw);
if(strlen(ipraw)!=0)
{
strcpy(IP[t],ipraw);
pthread_create(&dm[t],NULL,(void*)dmlog,(void*)t);
printf("fun:%s,%d,%d,%s\n",ipraw,t,strlen(ipraw),IP[t]);
t++;
}
}
printf("Create Thread Done!\n");
while(1)
{
sleep(8);
printf("I've finished my job ,I wanna go...\n");
exit(0);
}
close(fp);
free(tmpstr);
free(ipraw);
free(PINGI);
free(PINGC);
free(PINGS);
}
void *dmlog(int ag)
{
char *text=NULL;
text=(char *)malloc(sizeof(char)*200);
strcpy(text,"ping -w 6 -i ");
strcat(text,PINGI);
strcat(text," -c ");
strcat(text,PINGC);
strcat(text," -s ");
strcat(text,PINGS);
strcat(text," ");
strcat(text,IP[ag]);
strcat(text," |tee ./logs/");
strcat(text,IP[ag]);
strcat(text,".log");
//printf("PID:%d,THID:%lu,TEXT:%s,ARG:%s\n",getpid(),(unsigned int)pthread_self(),text,IP[ag]);
//printf("%s\n",text);
system(text);
free(text);
}
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
