如何匹配IP地址

时间:2019-01-08 21:49:01

标签: python

我正在尝试使用我输入的IP地址和在python上使用os的grep的IP地址匹配IP地址,但是当我运行我的代码时,代码说不匹配

app = Tk()
app.title('IP Address')
app.geometry('250x150+200+200')
b = StringVar()

ip = os.popen("ip -4 addr show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'").read()
#this will insert wlan0 ip address to variable ip
print(ip)

def com():
        c = b.get()
        if c == ip:
                labl3 = Label(text='Match').pack()
                app.destroy()
        else:
                labl3 = Label(text='Not Match').pack()

labl1 = Label(text='Input Ip address',font=30).pack()

text = Entry(textvariable=b).pack()

button1 = Button(text='Press to print', command= com).pack()

app.mainloop()

我该如何解决?

4 个答案:

答案 0 :(得分:2)

c == ip仅在两个字符串完全相同的情况下评估为真。

由于ip包含一些尾随空格字符(实际上,我刚刚运行了命令,并且确实包含了尾随换行字符),因此这可能未达到true。

因此,您应该这样比较它们:c.strip() == ip.strip()

.strip()方法删除给定字符串中的所有尾随和前导空格。因此,以上命令正在比较字符串的尾随/前导空格删除版本。


提示:如果您以后想调试类似的内容,请检查len(c)len(ip),看看它们的长度是否相同。

答案 1 :(得分:2)

如果您使用的是python3,则有一个ipaddress模块。人们会使用它的方式如下:

if ipaddress.ip_address(str(lab1)): # valid ip
    pass # or whatever
else:
    raise Exception('Invalid ip address')

如果您使用的是python2,则有一个backport。希望这会有所帮助。

答案 2 :(得分:0)

您可以通过修改正则表达式

pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")

之所以这样,是因为.是一个通配符,代表“每个字符”。

答案 3 :(得分:0)

几个入门问题。

我假设由于使用ip命令而在* nix机器上运行此命令,除非您为Mac或Windows的Linux安装了iproute2mac。您能告诉我们您在什么平台上运行吗?另外,您能告诉我命令ip -4 addr show的输出吗(请忽略您不想在线共享的任何详细信息)。除了平台相关的问题外,它可能是字符串修剪或字符转义的问题。如果您可以提供输入的打印调试,那也将非常有帮助。

谢谢!