2 Stimmen

Ich möchte die Mac-Adresse des entfernten PCs ermitteln.

Ich habe meine Webseite in Python, ich bin in der Lage, die IP-Adresse des Benutzers zu erhalten, der auf unsere Webseite zugreift, wir möchten die Mac-Adresse des PCs des Benutzers erhalten, ist es in Python möglich, wir verwenden Linux-PC, wir möchten es auf Linux erhalten.

5voto

tvanfosson Punkte 506878

Ich habe ein kleines, signiertes Java-Applet, das auf dem entfernten Computer eine Java 6-Laufzeitumgebung benötigt, um dies zu tun. Es verwendet die [getHardwareAddress()](http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getHardwareAddress()) Methode auf NetzwerkSchnittstelle um die MAC-Adresse zu erhalten. Ich verwende Javascript, um auf eine Methode im Applet zuzugreifen, die dies aufruft und ein JSON-Objekt zurückgibt, das die Adresse enthält. Dieses wird in ein verstecktes Feld im Formular eingefügt und zusammen mit den übrigen Feldern veröffentlicht.

3voto

joe Punkte 33003

von Active code

#!/usr/bin/env python

import ctypes
import socket
import struct

def get_macaddress(host):
    """ Returns the MAC address of a network host, requires >= WIN2K. """

    # Check for api availability
    try:
        SendARP = ctypes.windll.Iphlpapi.SendARP
    except:
        raise NotImplementedError('Usage only on Windows 2000 and above')

    # Doesn't work with loopbacks, but let's try and help.
    if host == '127.0.0.1' or host.lower() == 'localhost':
        host = socket.gethostname()

    # gethostbyname blocks, so use it wisely.
    try:
        inetaddr = ctypes.windll.wsock32.inet_addr(host)
        if inetaddr in (0, -1):
            raise Exception
    except:
        hostip = socket.gethostbyname(host)
        inetaddr = ctypes.windll.wsock32.inet_addr(hostip)

    buffer = ctypes.c_buffer(6)
    addlen = ctypes.c_ulong(ctypes.sizeof(buffer))
    if SendARP(inetaddr, 0, ctypes.byref(buffer), ctypes.byref(addlen)) != 0:
        raise WindowsError('Retreival of mac address(%s) - failed' % host)

    # Convert binary data into a string.
    macaddr = ''
    for intval in struct.unpack('BBBBBB', buffer):
        if intval > 15:
            replacestr = '0x'
        else:
            replacestr = 'x'
        macaddr = ''.join([macaddr, hex(intval).replace(replacestr, '')])

    return macaddr.upper()

if __name__ == '__main__':
    print 'Your mac address is %s' % get_macaddress('localhost')

3 Stimmen

Dies funktioniert nur im lokalen Netzwerk, da der ARP keine Netzwerkgrenzen überschreitet.

0 Stimmen

Ja, dem stimme ich zu Vielleicht ist es hilfreich für ihn oder ich muss es löschen.

1voto

databyss Punkte 5898

Sie können nur auf das zugreifen, was der Benutzer Ihnen sendet.

Die MAC-Adresse ist nicht Teil dieser Daten.

1 Stimmen

Ich hätte mich präziser ausdrücken sollen. Ihre Website kann nur das sehen, was der Webserver Ihnen mitteilt. Nach dem, was ich gesehen habe, ist die MAC-Adresse nicht Teil dieser Daten.

0 Stimmen

@Roberto: AFAIK ist die MAC Teil des Ethernet-Protokolls, nicht die IP.

8 Stimmen

Die MAC-Adresse wird immer mit dem Ethernet-Paket gesendet, bleibt aber an der Router-Grenze stehen, wenn das Paket an eine andere Leitung weitergeleitet wird. Wenn sich der Client im selben physischen Netzwerk befindet, können Sie einen ARP durchführen, um die der IP-Adresse entsprechende Adresse zu erhalten, aber das ist nur von begrenztem Nutzen.

0voto

wr. Punkte 2831

El dpkt Paket war bereits erwähnt auf SO. Es ermöglicht das Parsen von TCP/IP-Paketen. Ich habe es allerdings noch nicht für Ihren Fall verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X