91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

利用RawSocket實現簡單的Ping程序 ICMP協議 編程語言 C++ 操作系統 Linux(Ubuntu 10.0) 開發環境(可選)Qt4.7.0

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?“ping.h“
#include?
#include?
#include?
#include?
#include?
#include?
#define?MAX_SEND_TIME?4

void?ping(char?*ip);
void?sigint(int?sig);
void?(*signal_set(int?signo?void?(*func)(int)))(int);
void?signal_init();

char?ip[100];
//unsigned?long?ip[100];

int?main(int?argc?char?*argv[])
{
????????//參數檢查
????????if(argc?!=?3)
????????{
????????????????printf(“Usage:?./rawSock?-n(1?or?2)?IP?\n“);
????????????????exit(1);
????????}

????????//ping單一地址
????????if?(strcmp(argv[1]“-1“)==?0)
????????{
???????????qDebug()<<“argv[2]“<???????????unsigned?char*p;
???????????p?=?(unsigned?char*)argv[2];
???????/*??sprintf(ip?“%d.%d.%d.%d“?p[0]?p[1]?p[2]?p[3]);
???????????qDebug()<<“p[3]“<???????????qDebug()<<“ip“<*/
????????????memcpy(ip?argv[2]?sizeof(argv[2]));
????????????int?i_ip?=?atoi(ip);
????????????qDebug()<<“i_ip“<????????????ping(argv[2]);

????????????return?0;
????????}

????????//遍歷子網內所有地址
????????if(strcmp(argv[1]?“-2“)?==?0)
????????{
????????????char?*?last;
????????????int?i;
????????????char?ping_ip[20];
????????????int?len;
????????????//字符串處理?通過拼接字符串顯示所有遍歷的地址
????????????last?=?strrchr(?argv[2]?‘.‘);
????????????len?=?last?-?argv[2];
????????????argv[2][len]?=?‘\0‘;
????????????for(i?=?1?;?i?????????????{
????????????????sprintf(ping_ip?“%s%c%d“?argv[2]?‘.‘?i);
????????????????ping(ping_ip);
????????????}
????????????return?0;
????????}



}

void?ping(char?*ip)
{
????????int?sockfd;
????????struct?sockaddr_in?dstaddr;
????????int?times?=?0;

????????if((sockfd?=?socket(AF_INET?SOCK_RAW?IPPROTO_ICMP))?==?-1)
????????{
????????????????printf(“Create?Socket?Fail!\n“);
????????????????exit(1);
????????}

????????//填補目的地址
????????dstaddr.sin_family?=?AF_INET;
????????dstaddr.sin_port?=?htons(0);
????????if(inet_pton(AF_INET?ip?&dstaddr.sin_addr)?==?-1)
????????{
????????????????printf(“Get?IP?%s?Error!\n“?ip);
????????????????exit(1);
????????}

????????//設置信號
????????signal_init();

????????//輸出ping信息
????????printInfo(ip);

????????//?循環發送ICMP包?回顯
????????while(times?????????{
????????????????sendPing(sockfd?&dstaddr);
????????????????recvPing(sockfd?&dstaddr);
????????????????times++;
?????????????//???print_stat(ip);
????????}
????????qDebug()<<“ssssssss“;

????????//輸出統計信息
????????printState(ip);
}

/*?SIGINT信號處理函數?發送消息*/
void?sigint(int?sig)
{
????????printState(ip);
????????exit(0);
}


/*?進程信號設置函數?*/
void?(*signal_set(int?signo?void?(*func)(int)))(int)
{
????????int?ret;
????????struct?sigaction?sig;
????????struct?sigaction?osig;

????????sig.sa_handler?=?func;
????????sigemptyset(&sig.sa_mask);
????????sig.sa_flags?=?0;
#ifdef?SA_RESTART
????????sig.sa_flags?|=?SA_RESTART;
#endif?/*?SA_RESTART?*/

????????ret?=?sigaction(signo?&sig?&osig);

????????if?(ret?????????????????return?(SIG_ERR);
??????

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????1150??2010-11-29?11:01??rawsock\ping.h

?????文件???????3332??2010-11-29?10:58??rawsock\main.cpp

?????文件??????10990??2010-11-29?15:00??rawsock\ping.cpp

?????目錄??????????0??2010-12-13?23:44??rawsock

-----------?---------??----------?-----??----

????????????????15472????????????????????4


評論

共有 條評論