如何使用scapy获取自己的本地IP?

问题描述 投票:0回答:3

我找不到仅使用

scapy
(而不是 Python 的 stdlib)来查找本地 IP 地址的方法。 我发现的唯一解决方法是发送一个虚拟包并使用它从源字段检索地址,但我不认为这是一个好的解决方案。

python ip scapy
3个回答
6
投票

如果您查看https://scapy.readthedocs.io/en/latest/routing.html#get-local-ip-ip-of-an-interface 您可以使用

获取任何接口的本地IP
>>> ip = get_if_addr(conf.iface)  # default interface
>>> ip = get_if_addr("eth0")
>>> ip
'10.0.0.5'

2
投票

快速提醒:您可能有多个 IP 地址。您拥有的每个接口都有一个。要获取 scapy 当前工作接口的 IP 地址,您应该按照 Cukic0d 在评论中的建议执行

get_if_addr(conf.iface)
操作。

这里有一个在windows和linux下都可以工作的方法。这将为您提供所有接口的 IP 地址。

在 scapy shell 中工作

>>> s = set() # there will be redundencies so we'll use set to remove them
>>> for line in read_routes():
...:     s.add(line[4])
...:
>>> s
{'10.0.0.4',
 '169.254.106.110',
 '169.254.17.51',
 '169.254.177.137',
 '192.168.56.1',
 '192.168.99.1'}

在Python shell中

>>> import scapy.all as S
>>> s = set() # there will be redundencies so we'll use set to remove them
>>> for line in S.read_routes():
...:     s.add(line[4])
...:
>>> s
{'10.0.0.4',
 '169.254.106.110',
 '169.254.17.51',
 '169.254.177.137',
 '192.168.56.1',
 '192.168.99.1'}

0
投票
if True:
    import scapy
    import scapy.all

    lt_list = []

    for i in scapy.all.conf.ifaces.items():
        # ip of all Network Adapter
        lv_adapterName = str(i[1].name)
        lv_ip = scapy.all.get_if_addr(lv_adapterName)

        # print all ip in `python`,
        if lv_ip == "0.0.0.0":
            continue
        print("%s\t[%s]" % (lv_adapterName, lv_ip))
        lt_list.append(lv_ip)
        # verify it in `powershell`

    """powershell
    ipconfig /all
    """
© www.soinside.com 2019 - 2024. All rights reserved.