Попытка сравнить IP-адреса, но не знакомы с типом возврата - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь взять IP-адрес, полученный от Scapy, и сравнить его с известным IP-адресом, чтобы запустить другую функцию, когда я пытаюсь сравнить часть кода, возвращающую объект или что-то еще? Я не уверен, что именно это.

Я попытался сравнить выходную строку со строкой, и INT, я напечатал то, что я пытаюсь сравнить, а это не то, что я ожидал,

def arp_ping():
    ans, unans = srp(Ether(src = "b8:27:eb:a0:57:ff", dst="ff:ff:ff:ff:ff:ff:ff:ff")/ARP(pdst="172.16.16.0/24"),timeout=2)
    print(ans.summary(lambda p: p[1].sprintf("%Ether.src% is at %ARP.psrc%")))
    print(ARP.psrc)
    if ARP.psrc == "172.16.16.206":
        print("blueberry is %Ether.src% at %ARP.psrc%")

выход

68:ef:bd:8c:07:21 is at 172.16.16.1
60:38:e0:06:4e:2b is at 172.16.16.50
d4:81:d7:e6:b5:5a is at 172.16.16.100
d4:81:d7:e6:b5:e0 is at 172.16.16.101
64:51:06:34:b4:a7 is at 172.16.16.103
8c:dc:d4:2b:ee:7f is at 172.16.16.108
b8:27:eb:a0:57:ff is at 172.16.16.202
b8:27:eb:40:a8:08 is at 172.16.16.203
b8:27:eb:32:83:a0 is at 172.16.16.204
b8:27:eb:e7:46:93 is at 172.16.16.206
b8:27:eb:50:c7:c6 is at 172.16.16.207
b8:27:eb:8b:6a:60 is at 172.16.16.208
None
<Field (ARP).psrc>

Я ожидаю

68:ef:bd:8c:07:21 is at 172.16.16.1
60:38:e0:06:4e:2b is at 172.16.16.50
d4:81:d7:e6:b5:5a is at 172.16.16.100
d4:81:d7:e6:b5:e0 is at 172.16.16.101
64:51:06:34:b4:a7 is at 172.16.16.103
8c:dc:d4:2b:ee:7f is at 172.16.16.108
b8:27:eb:a0:57:ff is at 172.16.16.202
b8:27:eb:40:a8:08 is at 172.16.16.203
b8:27:eb:32:83:a0 is at 172.16.16.204
b8:27:eb:e7:46:93 is at 172.16.16.206
b8:27:eb:50:c7:c6 is at 172.16.16.207
b8:27:eb:8b:6a:60 is at 172.16.16.208

None

"blueberry is b8:27:eb:e7:46:93 at 172.16.16.206

Ответы [ 2 ]

0 голосов
/ 10 января 2019
def arp_ping():
ans, unans = srp(Ether(src = "b8:27:eb:a0:57:ff", dst="ff:ff:ff:ff:ff:ff:ff:ff")/ARP(pdst="172.16.16.0/24"),timeout=2)
print(ans.nsummary(lambda p: p[1].sprintf("%Ether.src% is at %ARP.psrc%")))
for r in ans.res:
    if r[1].sprintf("%ARP.psrc%") == "172.16.16.206":
        e_src = r[1].sprintf("%Ether.src%")
        a_src = r[1].sprintf("%ARP.psrc%")
        print("blueberry is {0} at {1}".format(e_src, a_src))

привел меня к тому, чего я не хотел, я знаю, почему кроме меня я сравнивал что-то, что было не тем, что я думал

0000 68:ef:bd:8c:07:21 is at 172.16.16.1
0001 60:38:e0:06:4e:2b is at 172.16.16.50
0002 d4:81:d7:e6:b5:e0 is at 172.16.16.101
0003 d4:81:d7:e6:b5:5a is at 172.16.16.100
0004 64:51:06:34:b4:a7 is at 172.16.16.103
0005 8c:dc:d4:2b:ee:7f is at 172.16.16.108
0006 b8:27:eb:a0:57:ff is at 172.16.16.202
0007 b8:27:eb:40:a8:08 is at 172.16.16.203
0008 b8:27:eb:32:83:a0 is at 172.16.16.204
0009 b8:27:eb:e7:46:93 is at 172.16.16.206
0010 b8:27:eb:43:9c:3e is at 172.16.16.205
0011 b8:27:eb:50:c7:c6 is at 172.16.16.207
0012 b8:27:eb:8b:6a:60 is at 172.16.16.208
None
blueberry is b8:27:eb:e7:46:93 at 172.16.16.206
0 голосов
/ 10 января 2019

Я не знаю, какой пакет вы используете, поэтому я не могу проверить это. Тем не менее, похоже, что будет работать следующее:

def arp_ping():
    ans, unans = srp(Ether(src = "b8:27:eb:a0:57:ff", dst="ff:ff:ff:ff:ff:ff:ff:ff")/ARP(pdst="172.16.16.0/24"),timeout=2)
    print(ans.summary(lambda p: p[1].sprintf("%Ether.src% is at %ARP.psrc%")))
    print(ARP.psrc)
    if ans.summary(lambda p: p[1].sprintf("%ARP.psrc%")) == "172.16.16.206":
        print(ans.summary(lambda p: p[1].sprintf("blueberry is %Ether.src% at %ARP.psrc%")))
...