2009-07-07 31 views
2

私は私のWebページをPythonで持っています。ユーザーのIPアドレスを取得できます。私たちのWebページにアクセスします。ユーザーのPCのMACアドレスを取得します。 、それはPythonで可能です、我々はLinuxのPCを使用している、我々はそれをLinux上で取得したい。リモートPCのMACアドレスを取得したい

答えて

1

あなたがアクセスできるのは、ユーザーがあなたに送信したものです。

MACアドレスはそのデータの一部ではありません。

+1

私はもっと正確になっていたはずです。あなたのウェブサイトには、ウェブサーバーがあなたに明らかにするものがすべて表示されます。私が見たことから、MACアドレスはそのデータの一部ではありません。 – databyss

+0

@Roberto:AFAIK MACはイーサネットプロトコルの一部であり、IPではありません。 –

+8

MACアドレスは常にイーサネットパケットとともに送信されますが、パケットが別の回線に転送されるとルータ境界で停止します。クライアントが同じ物理ネットワーク上にある場合は、IPアドレスに対応するアドレスを取得するためにARPを実行できますが、それは限られたユーティリティのみです。 – tvanfosson

3

from 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

これは、ARPがネットワークの境界を通過しないため、ローカルネットワーク上でのみ機能します。 – tvanfosson

+0

はい私はそれに同意します..それは彼または私はこの – joe

+0

を削除する必要があるかもしれないと彼はまた、Linuxについて言及:)しかし、それは私のために有用です:) –

5

私は小さなを持っている、これを行うには、リモートコンピュータ上でJava 6のランタイムを必要とするJavaアプレットは、署名しました。 NetworkInterfacegetHardwareAddress()メソッドを使用してMACアドレスを取得します。私はこれを呼び出すアプレットのメソッドにアクセスするためにjavascriptを使用し、アドレスを含むJSONオブジェクトを返します。これは、フォーム内の隠しフィールドに詰め込まれ、残りのフィールドと共にポストされます。

0

dpktパッケージは、already mentionedでした。 TCP/IPパケットの解析が可能です。私はまだあなたのケースでそれを使用していません。

関連する問題