4

新しいレコードを投稿するユーザーのMACアドレスを取得することは可能ですか?
と呼ばれる列がある場合mac_address、MACアドレスをその列に配置するようにコントローラーを作成するにはどうすればよいですか?

4

2 に答える 2

7

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}"]

このコードはosxmavericksでテストされており、ツールとフォーマットはlinux / bsd / solarisで異なる場合がありますが、同じアプローチである必要があります。もう1つの注意点は、ローカルイントラネット/ネットワークセグメントでのみ機能することです。

アップデート

Amazon Linuxで確認したところ、フォーマットは同じようです。

于 2013-12-30T03:01:51.803 に答える
6

ユーザーのMACアドレスはWebリクエストの一部ではありません。

それはあなたの質問ではないことは知っていますが、リクエストオブジェクトを使用してIPアドレスを取得できます。

request.ip

あなたのcreate行動では、あなたは次のようなものを持つことができます(あなたが列を持っていると仮定してip_address):

def create
  @item = Item.new(params[:item])
  @item.ip_address = request.ip
  if @item.save
    ...
  end
end
于 2013-01-05T20:03:17.763 に答える