#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}'