我想在连接到服务器后立即收到客户端的mac地址。为此,我尝试过套接字但服务器不会运行,除非我设置超时。我希望一直运行套接字,以便每当它到达服务器时我都可以从客户端接收数据。 基本上我有一个Wi-Fi设置,并希望使用连接到我的Wi-Fi网络的mac地址记录客户端。有没有其他方法可以将他们的mac地址与ssh区分开来。 我的view.py文件如下,如果有错误请通知。
from django.shortcuts import render
import os
# Create your views here.
#from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404
#import socket, sys
import pickle
import socket
TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
s = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
s.settimeout(3)
try:
conn, addr = s.accept()
objrcv = pickle.loads ( conn.recv ( 1024 ) )
ip = objrcv[0]
mac = objrcv[1]
except:
print "Can't connect"
def student_detail(request):
queryset = attendance.objects.filter(mac=mac)
context ={
"object_list":queryset,
"title": "Attendance",
}
return render(request, "attendance.html", context)
答案 0 :(得分:1)
你知道'连接客户端的IP地址。因此,您可以使用此信息获取更多信息,例如与arp -n
# your_app/views.py
import re
from subprocess import Popen, PIPE
from django.shortcuts import render
def mac(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
proc = Popen(["arp", "-n", ip], stdout=PIPE)
out = proc.communicate()[0]
mac = re.search(r"(([a-f\d]{1,2}\:){5}[a-f\d]{1,2})", out).groups()[0]
return render(request, 'mac.html', {'mac': mac})
arp -n
仅提供“已知”的结果。条目(arp -a
)。在这种情况下,它正在工作,因为客户端请求在 arp查找之前发生。