复制代解答代打如下:
function ce_getmac()
{
if(PHP_OS == 'WINNT')
{
$return_array = array();
$temp_array = array();
$mac_addr = "";
@exec("arp -a",$return_array);
foreach($return_array as $value)
{
if(strpos($value,$_SERVER["HTTP_CLIENT_IP"]) !== false &&
preg_match("/(:?[0-9a-f]{2} [:-]){5}[0-9a-f]{2}/i",$value,$temp_array))
{
$mac_addr = $temp_array[0];
休憩;
}
}
$mac_addr を返しますか? strtoupper($mac_addr) : '';
}
else if(PHP_OS == 'Linux')
{
return true;
}
}
LINUXではEXEC関数が使えない、つまりMACアドレスが取得できないことが分かりました。通信後、プロジェクトを LINUX サーバーに展開する必要があります。著者は長い間考えた結果、EXEC を実行せずにイントラネット ユーザーの MAC アドレスを取得できる解決策を見つけました。
イントラネットサーバーには192.168.1.151にサーバーがあり、このAPIにアクセスするとユーザーのMACが取得され、ユーザーアカウント情報がJOSNモードで出力されます。 MAC、少しは使えます。
CURL を使用してソース IP (IP は LINUX サーバーの IP ではなく、クライアントがアクセスする IP アドレス) を偽造し、CURL を 151 サーバーに送信すると、サーバーは応答を取得し、クライアントは次のように取得できます。ユーザーの IP アドレスと ARP -A パラメーターの MAC アドレスの通常の方法では、プログラムは 151 で実行され、151 は WINDOWS 2008 サーバーです。ただし、REMOTE_ADDR は使用できず、HTTP_CLIENT_IP を使用する必要があることに注意してください。 その理由は、HTTP_CLIENT_IP が CURL を使用して偽造できるため、LINUX を使用してユーザー IP を取得し、151 に送信して処理できるためです。
質問: ユーザーの IP に基づいて MAC アドレスを取得します。ユーザーが IP を変更した場合はどうすればよいですか? CMD で ARP -A 分析を使用すると、ユーザーが IP を変更しても、ユーザーに対応するコンピューターの MAC アドレスはデフォルトでは変更されません。
以下は IP 取得に関するネットユーザーの記事からの抜粋です:
Dz の IP を決定するコードが面倒すぎる REMOTE_ADDR、HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR の 3 つはマニュアルに詳しく記載されておらず、基本的には何もないのと同じです。 。
ネットで調べてみたところ、JSを使ってIPを取得してサーバーにPOSTするという賢すぎるアイデアがありました。オンラインに接続する勇気がある場合は、まず JS をオフにしてください。 !あはは、将来機会があれば ajax で試してみたいと思います。そうすれば、これら 3 つの変数の使用について心配する必要がなくなります。
$_SERVER['...']; // php の場合
1. プロキシ サーバーを使用しない場合:
REMOTE_ADDR = あなたの IP
HTTP_VIA = 値なしまたは表示なし
HTTP_X_FORWARDED_FOR = 値なしまたは表示なし
2 。透過的プロキシ サーバーを使用する場合: 透過的プロキシ
REMOTE_ADDR = 最後のプロキシ サーバー IP
HTTP_VIA = プロキシ サーバー IP
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98.182.163、203.98。 182.163、203.129.72.215。
このタイプのプロキシ サーバーは依然としてあなたの情報を訪問者に転送するため、あなたの本当の身元を隠すという目的を達成することはできません。
3. 通常の匿名プロキシ サーバーを使用する状況: 匿名プロキシ
REMOTE_ADDR = 最後のプロキシ サーバーの IP
HTTP_VIA = プロキシ サーバーの IP
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98 .182.163、203.98.182.163、203.129.72.215。
実際の IP を隠しますが、訪問者にはプロキシ サーバーを使用してアクセスしていることを明らかにします。
4. 不正なプロキシ サーバーの使用: プロキシの歪み
REMOTE_ADDR = プロキシ サーバーの IP
HTTP_VIA = プロキシ サーバーの IP
HTTP_X_FORWARDED_FOR = ランダムな IP 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98.182.163、203.98。 182.163、203.129.72.215。
訪問者に、プロキシ サーバーを使用していることを伝えますが、実際の IP の代わりに偽のランダム IP を作成して騙します。
5. 高匿名性プロキシ サーバーを使用する場合: 高匿名性プロキシ (エリート プロキシ)
REMOTE_ADDR = プロキシ サーバー IP
HTTP_VIA = 値なし、または表示されません
HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は同様です。 203.98.182.163、203.98.182.163、203.129.72.215。
プロキシ サーバーを使用してオブジェクトに直接アクセスしているのと同じように、すべての情報をプロキシ サーバーの情報で完全に置き換えます。
REMOTE_ADDR は、クライアントがサーバーと「ハンドシェイク」するときの IP です。 「匿名プロキシ」が使用されている場合、REMOTE_ADDR にはプロキシ サーバーの IP が表示されます。
HTTP_CLIENT_IP は、プロキシ サーバーによって送信される HTTP ヘッダーです。 「スーパー匿名プロキシ」の場合は、値 none が返されます。同様に、REMOTE_ADDR はこのプロキシ サーバーの IP に置き換えられます。
$_SERVER['REMOTE_ADDR']; //アクセス側(ユーザーの場合もプロキシの場合もある)IP
$_SERVER['HTTP_CLIENT_IP'] //エージェントの側(存在する可能性がある、偽造可能)
$_SERVER ['HTTP_X_FORWARDED_FOR] ']; //ユーザーがプロキシとして使用する IP (存在する可能性もあれば、偽造される可能性もある)
http://www.bkjia.com/PHPjc/324164.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/324164.html技術記事次のようにコードをコピーします。 function ce_getmac() { if(PHP_OS == 'WINNT') { $return_array = array(); $temp_array = ""; @exec("arp -a"; $ return_array); foreach($re...
)