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

#include 
#include 
#include 
#include 
#include 

/*
计算给定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}'

你可能感兴趣的:(C基本代码学习,网络,c++,fpga开发,bash)