C++之编码实现ping的功能

## ping_dev.h

#ifndef PING_DEV_H
#define PING_DEV_H

#include "typedef.h"

INT32 get_device_status(PCHAR pDevIp);
INT32 ping_fun(PCHAR pDevIp);
int ping_dev_by_icmp(PCHAR pDevIp);
int ping_dev_by_icmp_result();
UINT16 ping_dev_by_icmp_cksum(UINT16 *addr, UINT32 len);
int ping_dev_by_icmp_size(UINT32 pack_no);
VOID ping_dev_by_icmp_send();
VOID ping_dev_by_icmp_recv();
int ping_dev_by_icmp_upack(PCHAR buf, UINT32 len);
VOID ping_dev_by_icmp_timeval(struct timeval *out,struct timeval *in);

#endif

## ping_dev.cpp

#include "ping_dev.h"
#include "log.h"
#include <stdio.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <time.h>

//check static device status
#define PACET_SIZE 	4096
#define MAX_WAIT_TIME	3
#define MAX_NO_PACKETS	3

pid_t pid;
int sockfd = -1 ,datalen = 56;
int nsend = 0,nreceived = 0;
static INT32 gDevPingFlag = -1;		//-1:no device is pinging now, 0:some device is pinging now
char sendpacket[PACET_SIZE] = {'\0'};
char recvpacket[PACET_SIZE] = {'\0'};
struct sockaddr_in dest_addr;
struct sockaddr_in from;
struct timeval tvrecv;

/*******************************************************************************************************
Funtion: get_device_status
Description:get status of all device,through ping
Iput:pDevIp:device ip addr
Output:
Return:0:connected,-1:disconnected
*******************************************************************************************************/
INT32 get_device_status(PCHAR pDevIp)
{
    INT32 iRet = -1;

    if(gDevPingFlag == 0)
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值