Вопрос по python – Python - Получить MAC-адрес только подключенного локального сетевого адаптера [дубликат]

1

This question already has an answer here:

Getting MAC Address 13 answers

Цель состоит в том, чтобы собрать MAC-адресof the connected local NIC, not a list of all local NICs :)

Используяsocket а такжеconnect (to_a_website), I can just use getsockname() чтобы получить IP, который используется для подключения к Интернету.

Но из IP-адреса как я могу получить MAC-адрес локальной сетевой карты?

Основная причина этого вопроса - наличие нескольких сетевых карт.

Не дублированный, связанный вопрос не дает правильного ответа на конкретную проблему ОП. JohnEye
Также существует вопрос "почему вы хотите знать MAC-адрес?" Знание вашего варианта использования поможет. Li-aung Yip
Что означает «подключенный сетевой адаптер»? имею в виду? А откуда вы знаете, что внешний IP имеет MAC-адрес? MAC-адреса - это вещи Ethernet, а не интернет. David Schwartz

Ваш Ответ

6   ответов
1

Смотрите обсуждения наКак получить MAC-адрес внешнего IP в C # для уточнения.

0

в том, чтобы использовать команду ping для проверки связи с именем системы, а затем выполнить запрос arp -a для проверяемого IP-адреса. В таком случае вам нужно записать ping-ответ в память python и выполнить операцию readline, чтобы получить IP-адрес, а затем записать соответствующие данные ARP в память при записи имени системы, IP-адреса и Mac ID для рассматриваемой машины, либо для дисплея, либо для тестового файла.

Я пытаюсь сделать что-то похожее на проверку системы, чтобы улучшить автоматизацию процедуры тестирования, и сценарий на данный момент находится на python.

0

сеть Ethernet, который может быть найден на самом нижнем уровне цепочки обработки tcp. Для этого вам необходимо отслеживать (захватывать) сетевой трафик, находить некоторые пакеты, анализируя заголовок пакета. и извлеките из него необходимую информацию, такую как MAC-адрес.

этополезный код , это может помочь вам сделать это.

1

netifaces должен хорошо работать, чтобы перейти от IP-> iface:

    import netifaces as nif
    def mac_for_ip(ip):
        'Returns a list of MACs for interfaces that have given IP, returns None if not found'
        for i in nif.interfaces():
            addrs = nif.ifaddresses(i)
            try:
                if_mac = addrs[nif.AF_LINK][0]['addr']
                if_ip = addrs[nif.AF_INET][0]['addr']
            except IndexError, KeyError: #ignore ifaces that dont have MAC or IP
                if_mac = if_ip = None
            if if_ip == ip:
                return if_mac
        return None

Тестирование:

    >>> mac_for_ip('169.254.90.191')
    '2c:41:38:0a:94:8b'
0

роки, доступные в вашей ОС. Запустите инструмент, используяsubprocess модуль (неos.system()!), собрать вывод и разобрать его.

В Windows нужная вам командаipconfig /all.

На большинстве Unices, включая Linux, OSX и BSD, этоifconfig.

Возможно, есть лучший способ сделать это, не обращаясь к утилите командной строки, но я этого не знаю ...yet.

Пример выводаipconfig /all в Windows XP:

D:\Documents and Settings\LAYip>ipconfig /all

Windows IP Configuration

        Host Name . . . . . . . . . . . . : <redacted>
        Primary Dns Suffix  . . . . . . . : <redacted>
        Node Type . . . . . . . . . . . . : Hybrid
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No
        DNS Suffix Search List. . . . . . : <redacted>
                                            <redacted>

Ethernet adapter Local Area Connection:

        Connection-specific DNS Suffix  . : <redacted>
        Description . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Con
nection #2
        Physical Address. . . . . . . . . : 5C-26-0A-60-8D-C7
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : xxx.xxx.28.29
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : xxx.xxx.28.254
        DHCP Server . . . . . . . . . . . : xxx.xxx.23.13
        DNS Servers . . . . . . . . . . . : xxx.xxx.23.13
                                            xxx.xxx.23.11
        Lease Obtained. . . . . . . . . . : Thursday, 12 April 2012 9:14:41 AM
        Lease Expires . . . . . . . . . . : Friday, 20 April 2012 9:14:41 AM

Ethernet adapter VirtualBox Host-Only Network:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
        Physical Address. . . . . . . . . : 08-00-27-00-28-E6
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 192.168.56.1
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :

Выход изifconfig под Linux:

[email protected]:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:25:22:db:8c:b6
          inet addr:10.1.1.2  Bcast:10.1.1.255  Mask:255.255.255.0
          inet6 addr: fe80::225:22ff:fedb:8cb6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:322333 errors:0 dropped:0 overruns:0 frame:0
          TX packets:296952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:40005876 (40.0 MB)  TX bytes:162343969 (162.3 MB)
          Interrupt:40 Base address:0x4000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:362 errors:0 dropped:0 overruns:0 frame:0
          TX packets:362 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:31806 (31.8 KB)  TX bytes:31806 (31.8 KB)
Error: User Rate Limit Exceeded Matb
1

netifaces модуль. Это такжена PyPI так что вы можете установить его черезeasy_install или жеpip.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededdoes exactly what the OP wantedError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Matb
Error: User Rate Limit Exceeded

Похожие вопросы