自编实现计算网络号的C源程序和Shell脚本

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>

/*
计算给定IP地址和掩码的网络号
*/

int main(int argc, char const *argv[])
{
        if(argv[1]==NULL || argv[2]==NULL){
                printf("This program need ip_addr and prefix_number\n");
                exit(1);
        }
        struct in_addr addr, mask;
        char* ip = (char*)argv[1];
        int prefix = atoi(argv[2]);
        unsigned int std_mask = 0b11111111111111111111111111111111;

        std_mask = std_mask << (32-prefix);

        std_mask = htonl(std_mask);

        inet_aton(ip, &addr);

        unsigned char *tiny = (unsigned char *)&std_mask;
        unsigned int std_ip = addr.s_addr;
        unsigned char *pp = (unsigned char *)&std_ip;

        for(int i=0;i<4;i++){
                if(i!=3)
                printf("%u.", *pp&*tiny);
                pp++;
                tiny++;
                if(i==3)
                printf("%u/%d\n", *pp&*tiny, prefix);

        }

        return 0;
}

#!/bin/bash
# ##
# 获取当前主机的网络号
# ##

for (( i = 1; i <= 4; i++ )); do
	a=`ip a| grep global| awk '{print $2}' | awk -F'.' "{print $"$i"}"`
	b=`ifconfig | grep broadcast | awk '{print $4}' | awk -F'.' "{print $"$i"}"`
	c=`echo $(("$a" & "$b"))`
	if [[ $i -ne 4 ]]; then
		printf $c.
	elif [[ $i -eq 4 ]]; then
		printf $c/
	fi
done
ip a| grep global| awk '{print $2}' | awk -F'/' '{print $2}'

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值