常用socket代码整理

265 篇文章 0 订阅
184 篇文章 2 订阅
unsigned int str_to_ip(const char * const ip_str)
{
    struct in_addr  ip;

    if ( NULL == ip_str )
        return 0;

    if ( 0 != inet_aton(ip_str, &ip) )
    {
        return (unsigned int)(ntohl(ip.s_addr));
    }
    else
    {
        return 0;
    }
}

int str_to_mac(const char * mac_str, char * mac)
{
    int     i;
    char    str[3] = {0};
    char    *endptr;

    if ( NULL == mac_str || NULL == mac )
        return -1;

    errno = 0;

    for ( i = 0; i < 6 && NULL != mac_str ; i++ )
    {
        strncpy(str, mac_str, 2);

        mac[i] = strtol(str, &endptr, 16);

        if ( (errno == ERANGE && (mac[i] == LONG_MAX || mac[i] == LONG_MIN))
            || (errno != 0 && mac[i] == 0) || (endptr == str) ) // error
        {
            mac[i] = 0;
            break;
        }

        mac_str = strstr(mac_str, ":") + 1;
    }

    if ( i != 6 )
        return -1;
    else
        return NVD_OK;
}

unsigned int get_local_ip(const char * const name)
{
    int sock;

    struct ifreq ifr;
    struct in_addr ip;

    if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
    {
        return 0;
    }

    memset(&ifr, 0, sizeof(struct ifreq));
    sprintf(ifr.ifr_name, name);

    if (ioctl(sock, SIOCGIFADDR, (char*)&ifr))
    {
        close(sock);
        return 0;
    }

    ip.s_addr = *(unsigned int*)&ifr.ifr_addr.sa_data[2];

    close(sock);

    return (unsigned int)ip.s_addr;
}

int get_net_status(const char * const name)
{
    int sock;

    struct ifreq ifr;

    if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
    {
        return NVD_ERR_NET;
    }

    memset(&ifr, 0, sizeof(struct ifreq));
    sprintf(ifr.ifr_name, name);

    if (ioctl(sock, SIOCGIFFLAGS, (char*)&ifr))
    {
        close(sock);
        return NVD_ERR_NET;
    }

    if ((ifr.ifr_flags & IFF_UP) && (ifr.ifr_flags & IFF_RUNNING))
    {
        close(sock);
        return NVD_OK;
    }
    else
    {
        close(sock);
        return NVD_ERR_NET;
    }
}

unsigned int get_ip_by_domain(const char * const domain)
{
    struct hostent *he;
    struct in_addr ip;

    he = gethostbyname(domain);
    if (NULL == he)
    {
        return 0;
    }

    ip.s_addr = *((unsigned int*)(he->h_addr));

    return (unsigned int)ip.s_addr;
}
 

#define IP_ARRAY(addr) \     ((unsigned char *)&addr)[3], \     ((unsigned char *)&addr)[2], \     ((unsigned char *)&addr)[1], \     ((unsigned char *)&addr)[0] #define IP_STRING "%u.%u.%u.%u"

#define MAC_ARRAY(addr) \     ((unsigned char *)addr)[0], \     ((unsigned char *)addr)[1], \     ((unsigned char *)addr)[2], \     ((unsigned char *)addr)[3], \     ((unsigned char *)addr)[4], \     ((unsigned char *)addr)[5] #define MAC_STRING "%02x:%02x:%02x:%02x:%02x:%02x"


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值