是否可以获取发布新记录的用户的MAC地址?
如果我有一个名为mac_address
的列,如何编写控制器以将MAC地址放入该列?
答案 0 :(得分:6)
用户的mac地址不是网络请求的一部分。
我知道这不是您的问题,但您可以使用请求对象获取其IP地址:
request.ip
在您的create
操作中,您可以使用以下内容(假设您有一列ip_address
):
def create
@item = Item.new(params[:item])
@item.ip_address = request.ip
if @item.save
...
end
end
答案 1 :(得分:6)
您可以使用request.ip
并对其进行ping操作。这应该将ip放入你机器的arp缓存中。通过转储arp缓存,您可以匹配MAC地址。
`ping -c 1 #{request.ip}`
sleep(10) # For dramatic effect
arptable = `arp -a`
entries = arptable.split("\n")
ipmap = {}
entries.each do |e|
ent = e.split(" ")
ipmap["#{ent[1].gsub(/\(|\)/, "")}"] = ent[3]
end
puts ipmap["#{request.ip}"]
此代码在osx mavericks上进行测试,工具和格式可能因linux / bsd / solaris而异,但应采用相同的方法,另一点需要注意的是它只适用于本地Intranet /网段。
检查亚马逊linux并且格式似乎相同。