免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lengyuzlg
打印 上一主题 下一主题

一道面试题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-08-21 09:56 |只看该作者
原来我的机子没有装,需要安装iproute包

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
22 [报告]
发表于 2010-08-21 10:53 |只看该作者
本帖最后由 expert1 于 2010-08-21 11:09 编辑

O(∩_∩)O~,楼主蛮有个性的啊,不过某些面试官是他妈的不近人情,心理变态,把不爽发泄到你头上,我都遇到过类似的情况。

  1. 在北上广这样的城市,一个面试会浪费你半天时间,还得让你起个大早。同还会让你错过另外一个面试(面试时间可能有冲突,不得不放弃)。
  2. 最后的结果是很愤怒。
复制代码
其实这个题就是获取IP/netmask然后算出网段的IP范围。
  1. ip r|awk 'NR=1{print $1}'
复制代码
172.24.203.0/24

然后ipcalc 计算一下。
  1. ipcalc -b 172.24.203.0/24
复制代码
Address:   172.24.203.0         
Netmask:   255.255.255.0 = 24   
Wildcard:  0.0.0.255            
=>
Network:   172.24.203.0/24      
HostMin:   172.24.203.1         
HostMax:   172.24.203.254      
Broadcast: 172.24.203.255      
Hosts/Net: 254                   Class B, Private Internet

取出HostMin,hostmax之后在用一个for 循环去ping 把ping得通的重定向到ip_live.txt里

  1. for i in `cat ip`;do ping -c 10 $i >>/dev/null ;

  2. [ $? -eq 0 ] && echo $i >>ip_live.txt
  3. done
复制代码
至于其他人说的什么vlan之类的,一个vlan是一个子网,用IP、掩码算不出另外一个vlan的IP的。[/code]

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
23 [报告]
发表于 2010-08-21 12:23 |只看该作者
回复 22# expert1


你用NR=1这种错误的语法也很有个性

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
24 [报告]
发表于 2010-08-21 12:27 |只看该作者
回复 23# Shell_HAT


    汗,最近状态不佳啊。怎么搞成赋值了

应该是判断,是NR==1啊。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
25 [报告]
发表于 2010-08-21 14:30 |只看该作者
考官看到上面的答案,突然因为自己看不懂而大怒,对楼主说:你这样是不行的,忘了告诉你,这道题需要你用笔算!

论坛徽章:
0
26 [报告]
发表于 2010-08-22 15:37 |只看该作者
自己写了个脚本,应该可行吧

#!/bin/bash
ip r | awk 'NR==1{print $1}' | awk -F'.' '{print $1"."$2"."$3}' > /network
network=`cat /network`
for ((i=1;i<=254;i++))
do
        if ping -c 1 $network.$i > /dev/null 2>&1
        then
        status=1
        echo "OK"
        echo "$network.$i" >> /ok.txt
        else
        status=0
        echo "error!"
        fi
done


根下ok.txt文件里就是正常的主机列表了

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
27 [报告]
发表于 2010-08-22 16:22 |只看该作者
回复 26# ljwd1000


    你这里是192.168.0.0/24位的这种,你咋确定内网主机一定是这个呢,万一是192.168.1.0/25位呢,主机范围明显是1-126了。
还有172开头的呢。

论坛徽章:
0
28 [报告]
发表于 2010-08-22 23:12 |只看该作者
写了一个通过IP地址和子网掩码计算网络地址、广播地址以及主机数目的shell脚本
仅供各位参考 使用
欢迎指正
  1. #!/bin/sh
  2. #Written by bigarmy.

  3. #ip=172.16.3.1/24
  4. usage()
  5. {
  6.         echo "Usage: please use it like [ $0 172.16.3.1/24 ]"
  7.         exit 1
  8. }
  9. if [ $# -ne 1 ]; then
  10.         usage
  11. else
  12.         ip=$1
  13.         echo $ip | egrep -q '[/|.]' || { usage; }
  14. fi

  15. ip1=`echo $ip | awk -F'[./]' '{print $1}'`
  16. ip2=`echo $ip | awk -F'[./]' '{print $2}'`
  17. ip3=`echo $ip | awk -F'[./]' '{print $3}'`
  18. ip4=`echo $ip | awk -F'[./]' '{print $4}'`
  19. mask=`echo $ip | awk -F'[./]' '{print $5}'`
  20. ipsum=$(( $(($ip1<<24)) + $(($ip2<<16)) + $(($ip3<<8)) + $ip4 ))

  21. if [ $mask -ge 8 ] && [ $mask -lt 16 ]; then
  22.         let "B0=16-$mask"
  23.         mask_2=$(((255<<$B0)&255))
  24.         masksum=$(( $((255<<24)) + $(( $mask_2<<16 )) + 0 + 0 ))
  25.         ip_net_sum=$(( $ipsum & $masksum ))
  26.         ip_net_4=$(( ($ip_net_sum)%256 ))
  27.         ip_net_3=$(( ($ip_net_sum>>8)%256 ))
  28.         ip_net_2=$(( ($ip_net_sum>>16)%256 ))
  29.         ip_net_1=$(( ($ip_net_sum>>24)%256 ))
  30.         echo "Network: $ip_net_1.$ip_net_2.$ip_net_3.$ip_net_4/$mask"
  31.         Min=$(($ip_net_4 + 1))
  32.         echo "HostMin: $ip_net_1.$ip_net_2.$ip_net_3.$Min"
  33.         ip_num=$((2**(32-$mask)))
  34.         ip_net_2_2=$(($ip_num/(256*256) + $ip_net_2 - 1))
  35.         ip_num_hosts=$ip_num
  36.         for((i=$ip_net_2;i<=$ip_net_2_2;i++))
  37.         do
  38.                 ip_num_hosts=$(($ip_num_hosts - 256*2))
  39.         done
  40.         echo "HostMax: $ip_net_1.$ip_net_2_2.255.254"
  41.         echo "Broadcast: $ip_net_1.$ip_net_2_2.255.255"
  42.         echo "HostsNum: $ip_num_hosts"

  43. elif [ $mask -ge 16 ] && [ $mask -lt 24 ]; then
  44.         let "B0=24-$mask"
  45.         mask_3=$(((255<<$B0)&255))
  46.         masksum=$(( $((255<<24)) + $((255<<16)) + $(( $mask_3<<8 )) + 0 ))
  47.         ip_net_sum=$(( $ipsum & $masksum ))
  48.         ip_net_4=$(( ($ip_net_sum)%256 ))
  49.         ip_net_3=$(( ($ip_net_sum>>8)%256 ))
  50.         ip_net_2=$(( ($ip_net_sum>>16)%256 ))
  51.         ip_net_1=$(( ($ip_net_sum>>24)%256 ))
  52.         echo "Network: $ip_net_1.$ip_net_2.$ip_net_3.$ip_net_4/$mask"
  53.         Min=$(($ip_net_4 + 1))
  54.         echo "HostMin: $ip_net_1.$ip_net_2.$ip_net_3.$Min"
  55.         ip_num=$((2**(32-$mask)))
  56.         ip_net_3_2=$(($ip_num/256 + $ip_net_3 - 1))
  57.         ip_num_hosts=$ip_num
  58.         for((i=$ip_net_3;i<=$ip_net_3_2;i++))
  59.         do
  60.                 ip_num_hosts=$(($ip_num_hosts - 2))
  61.         done
  62.         echo "HostMax: $ip_net_1.$ip_net_2.$ip_net_3_2.254"
  63.         echo "Broadcast: $ip_net_1.$ip_net_2.$ip_net_3_2.255"
  64.         echo "HostsNum: $ip_num_hosts"
  65. elif [ $mask -ge 24 ] && [ $mask -lt 32 ]; then
  66.         let "B0=32-$mask"
  67.         mask_4=$(((255<<$B0)&255))
  68.         masksum=$(( $((255<<24)) + $((255<<16)) + $((255<<8)) + $mask_4 ))
  69.         ip_net_sum=$(( $ipsum & $masksum ))
  70.         ip_net_4=$(( ($ip_net_sum)%256 ))
  71.         ip_net_3=$(( ($ip_net_sum>>8)%256 ))
  72.         ip_net_2=$(( ($ip_net_sum>>16)%256 ))
  73.         ip_net_1=$(( ($ip_net_sum>>24)%256 ))
  74.         echo "Network: $ip_net_1.$ip_net_2.$ip_net_3.$ip_net_4/$mask"
  75.         Min=$(($ip_net_4 + 1))
  76.         echo "HostMin: $ip_net_1.$ip_net_2.$ip_net_3.$Min"
  77.         ip_num=$((2**$B0))
  78.         ip_broadcast_4=$(( $ip_net_4 + $ip_num - 1))
  79.         Max=$(($ip_broadcast_4 - 1))
  80.         echo "HostMax: $ip_net_1.$ip_net_2.$ip_net_3.$Max"
  81.         echo "Broadcast: $ip_net_1.$ip_net_2.$ip_net_3.$ip_broadcast_4"
  82.         echo "HostsNum: $(($ip_num - 2))"
  83. elif [ $mask -eq 32 ]; then
  84.         echo "Hostroute: $ip1.$ip2.$ip3.$ip4"
  85.         echo "HostsNum: 1"
  86. fi
复制代码

论坛徽章:
0
29 [报告]
发表于 2010-08-22 23:19 |只看该作者
本帖最后由 cheungjustin 于 2010-08-22 23:32 编辑

回复 1# lengyuzlg
持续关注此贴... ...

论坛徽章:
0
30 [报告]
发表于 2010-08-23 09:04 |只看该作者
回复  好看的附件


    一个电话忽悠哥过去面个试,一个不行就要让哥滚蛋,这还得了 !!!  不开个电脑执 ...
BangBull 发表于 2010-08-20 14:20



    ........
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP