首页 > 试题广场 >

写一段程序判断IP字符串是否属于内网IP

[编程题]写一段程序判断IP字符串是否属于内网IP
  • 热度指数:1987 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
从业 666 年的 BILIBILI 网络安全工程师 KindMo 最近很困惑,公司有一个业务总是受到 SSRF 攻击。请帮他写一个程序,判断输入的字符串是否属于内网IP,用于防御该漏洞。
我们知道常见的内网IP有,127.0.0.1,192.168.0.1 等。

输入描述:
每次输入仅包含一个IP字符串,即一个测试样例


输出描述:
对于每个测试实例输出整数1或0,1代表True,即输入属于内网IP,0代表False,即输入不属于内网IP或不是IP字符串。
示例1

输入

42.96.146.169

输出

0
虽然测试用例可能会不充分,但是自己实际写代码还是尽量多判断一些情况。比如后两段>255和一些异常输入。
关键知识点:
私有IP地址范围:
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255

localhost:127.0.0.1
解题代码:
# -*- coding:utf-8 -*-

def check_internal_ip(check_ip):

    check_ip_list = check_ip.split(".")
    if len(check_ip_list) == 4:
        a, b, c, d = check_ip_list

        a = int(a)
        b = int(b)
        c = int(c)
        d = int(d)

        if a > 255 or b > 255 or c > 255 or d > 255:
            return 0

        elif a == 10 and b >= 0 and c >= 0 and d >= 0:
            return 1

        elif a == 172 and (16 <= b <= 31) and c >= 0 and d >= 0:
            return 1

        elif a == 192 and b == 168 and c >= 0 and d >= 0:
            return 1

        else:
            return 0

    else:
        return 0


check_ip = input()
print(check_internal_ip(check_ip))



编辑于 2019-09-30 02:51:16 回复(0)
if input().split('.')[0] in ['127','192','10','172']: print(1)
else: print(0)
---
if input()[:3] in ('127','192','10.','172'): print(1)
else: print(0)



编辑于 2019-09-20 17:47:33 回复(2)

热门推荐

通过挑战的用户

查看代码