C#中有什么方法可以获取到使用者的IP嘛?

用Winforms做了一个C/S的程序,在客户使用的时候要验证对方的IP,有什么方法来获取IP嘛?写详细点,另有加分!!... 用Winforms做了一个C/S的程序,在客户使用的时候要验证对方的IP,有什么方法来获取IP嘛?
写详细点,另有加分!!
展开
 我来答
沧海V飞天
2008-12-05 · TA获得超过450个赞
知道小有建树答主
回答量:394
采纳率:0%
帮助的人:271万
展开全部
获取远程主机的MAC地址时,需要借用API函数SendARP.该函数使用ARP协议,向目的主机发送ARP包,利用返回并存储在高速缓存中的IP和MAC地址对,从而获取远程主机的MAC地址.

示例:
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip

try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len); //发送ARP包
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();

但使用该方式获取MAC时有一个很大的限制,就是只能获取同网段的远程主机MAC地址.因为在标准网络协议下,ARP包是不能跨网段传输的,故想通过ARP协议是无法查询跨网段设备MAC地址的。

示例程序:

using System.Net;
using System;
using System.Management;
using System.Runtime.InteropServices;

public class getIP
{
[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);

//获取本机的IP
public string getLocalIP()
{
string strHostName = Dns.GetHostName(); //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName); //取得本机IP
string strAddr = ipEntry.AddressList[0].ToString();
return(strAddr);
}
//获取本机的MAC
public string getLocalMac()
{
string mac = null;
ManagementObjectSearcher query =new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration") ;
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
if(mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
}
return(mac);
}

//获取远程主机IP
public string[] getRemoteIP(string RemoteHostName)
{
IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName);
IPAddress[] IpAddr = ipEntry.AddressList;
string[] strAddr = new string[IpAddr.Length];
for (int i=0;i<IPADDR.LENGTH;I++)
{
strAddr[i] = IpAddr[i].ToString();
}
return(strAddr);
}
//获取远程主机MAC
public string getRemoteMac(string localIP, string remoteIP)
{
Int32 ldest= inet_addr(remoteIP); //目的ip
Int32 lhost= inet_addr(localIP); //本地ip

try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
return Convert.ToString(macinfo,16);
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0.ToString();
}

public static void Main(string[] args)
{
getIP gi = new getIP();
Console.WriteLine("本地网卡信息:");
Console.WriteLine(gi.getLocalIP() + " - " + gi.getLocalMac());

Console.WriteLine("\n\r远程网卡信息:");
string[] temp = gi.getRemoteIP("scmobile-tj2");
for(int i=0;i<TEMP.LENGTH;I++)
{
Console.WriteLine(temp[i]);
}
Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"));
}
}
Storm代理
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto... 点击进入详情页
本回答由Storm代理提供
宣义坊的大蚂蚁
2008-12-05 · TA获得超过2831个赞
知道大有可为答主
回答量:1617
采纳率:90%
帮助的人:886万
展开全部
C/S的话需要取得的是客户端的内网IP地址吧,
如果是的话,在客户端执行以下代码,并把结果返回给服务端即可:
IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());

以下是例子:

public static void DoGetHostAddresses(string hostname)
{
IPAddress[] ips;

ips = Dns.GetHostAddresses(hostname);

Console.WriteLine("GetHostAddresses({0}) returns:", hostname);

foreach (IPAddress ip in ips)
{
Console.WriteLine(" {0}", ip);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻梦浮云
2008-12-05 · TA获得超过325个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:58.2万
展开全部
MessageBox.Show("IP:"+
System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[0].ToString());

参考回答:
http://zhidao.baidu.com/question/30991349.html?si=1
回答者:karenback

我这里不是很好验证,通过外网服务器返回那个又比较麻烦...
如果有问题,可以给我发短信
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
武功山高铁站接待中心
2008-12-05 · TA获得超过8207个赞
知道小有建树答主
回答量:3139
采纳率:0%
帮助的人:797万
展开全部
IPAddress[] ip=new IPAddress[1];

ip = Dns.GetHostAddresses("HB");

MessageBox.Show(ip[0].ToString());
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bingjings
2008-12-12 · 超过34用户采纳过TA的回答
知道答主
回答量:160
采纳率:0%
帮助的人:40.9万
展开全部
获取到的是内网IP
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式