| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <%@ WebHandler Language="C#" Class="getIP" %>
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Runtime.InteropServices;
- using System.Diagnostics;
- using System.Text.RegularExpressions;
- public class getIP : IHttpHandler
- {
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/html";
- context.Response.Write("HostAddress:"+context.Request.UserHostAddress +"<br>");
- context.Response.Write("HostName:"+context.Request.UserHostName +"<br>");
- context.Response.Write("Agent:"+context.Request.UserAgent +"<br>");
- context.Response.Write("REMOTE_ADDR:"+context.Request.ServerVariables["REMOTE_ADDR"] +"<br>");
- context.Response.Write("HTTP_X_FORWARDED_FOR:"+context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] +"<br>");
-
- string ip = context.Request.ServerVariables["REMOTE_ADDR"];
- context.Response.Write("MAC:"+GetClientMac(ip) +"<br>");
- context.Response.Write("MAC2:"+GetClientMac(ip) +"<br>");
- }
- [DllImport("Iphlpapi.dll")]
- private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
- [DllImport("Ws2_32.dll")]
- private static extern Int32 inet_addr(string ip);
- public static string GetClientMac(string IP)
- {
- Int32 ldest = inet_addr(IP);
- Int64 macinfo = new Int64();
- Int32 len = 6;
- int res = SendARP(ldest, 0, ref macinfo, ref len);
- string mac_src = macinfo.ToString("X");
- while (mac_src.Length < 12)
- {
- mac_src = mac_src.Insert(0, "0");
- }
- string mac_dest = "";
- for (int i = 0; i < 11; i++)
- {
- if (0 == (i % 2))
- {
- if (i == 10)
- {
- mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2));
- }
- else
- {
- mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));
- }
- }
- }
- return mac_dest;
- }
- //跨网段取Mac
- public string GetMac(string IP)
- {
- string dirResults = "";
- ProcessStartInfo psi = new ProcessStartInfo();
- Process proc = new Process();
- psi.FileName = "nbtstat";
- psi.RedirectStandardInput = false;
- psi.RedirectStandardOutput = true;
- psi.Arguments = "-A " + IP;
- psi.UseShellExecute = false;
- proc = Process.Start(psi);
- dirResults = proc.StandardOutput.ReadToEnd();
- proc.WaitForExit();
- dirResults = dirResults.Replace("\r", "").Replace("\n", "").Replace("\t", "");
- Regex reg = new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))__MAC", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- Match mc = reg.Match(dirResults + "__MAC");
-
- if (mc.Success)
- { return mc.Groups["key"].Value; }
- else
- {
- reg = new Regex("Host not found", RegexOptions.IgnoreCase | RegexOptions.Compiled);
- mc = reg.Match(dirResults);
- if (mc.Success)
- {
- return "Host not found!";
- }
- else
- { return ""; }
- }
- }
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
|