ifconfig eth0 up 第二步:设置网卡进入系统时启动想要每次开机就可以自动获取IP地址上网,就要设置网络服务在系统启动时也启动。
Linux有一点与windows不同的是很多服务默认是停止的,而且在某次使用该服务时启动这个服务,但是没设置它为默认启动,则下次进入系统这个服务依然是停止的。
下面是设置网络服务在系统启动时也启动的方法。
使用chkconfig命令让网络服务在系统启动级别是2345时默认启动。
# chkconfig --level 2345 network on第三步:修改网卡文件ifcfg-eth0修改ifcfg-eth0文件,设置ONBOOT的值为yes
向大家介绍一下我们将如何获得一台主机的IP地址。在Win32 API中我们可以使用NetWork API完成这项工作,但是在.Net平台下我们应当如何做呢?其实操作方法与API差不多,只是大家要理解一下Namespace与Class。本站这方面的文章很多,关于Namespace与Class的内容就不介绍了。.Net平台存在System.Net命名空间,其中的DNS类,提供了一些方法可以获取服务器的服务名或者是IP地址。DNS是一个静态类,所以它能够直接创建类实例。闲话少说,我们来看具体的程序:
namespace NKUtilities
{
using System
using System.Net
public class DNSUtility
{
public static int Main (string [] args)
{
String strHostName = new String ("")
if (args.Length == 0)
{
// 获得本地的IP地址
//首先获了本地机的主机名
strHostName = DNS.GetHostName ()
Console.WriteLine ("Local Machine''s Host Name: " + strHostName)
}
else
{
strHostName = args[0]
}
// 接着使用主机名,获取IP地址列表
// 一台主机可能不只一个IP哦,不要被某些人误导了,呵呵,想想以前的163与169就知道了
IPHostEntry ipEntry = DNS.GetHostByName (strHostName)
IPAddress [] addr = ipEntry.AddressList
for (int i = 0i <addr.Lengthi++)
{
Console.WriteLine ("IP Address {0}: {1} ", i, addr[i].ToString ())
}
return 0
}
}
}
如果你想获得主机名,你可以使用不带参数的GetHostName方法,接着使用这个主机名作为参数交给GetHostByName方法,以获取IPAddress列表。最后是输出列表中的IP地址。
C#编程之 如何获取本地和远程主机的IP及MAC地址
利用dns类和WMI规范获取IP及MAC地址
在C#编程中,要获取主机名和主机IP地址,是比较容易的.它提供的Dns类,可以轻松的取得主机名和IP地址.
示例:
string strHostName = Dns.GetHostName() //得到本机的主机名
IPHostEntry ipEntry = Dns.GetHostByName(strHostName)//取得本机IP
string strAddr = ipEntry.AddressList[0].ToString()//假设本地主机为单网卡
在这段代码中使用了两个类,一个是Dns类,另一个为IPHostEntry类,二者都存在于命名空间System.Net中.
Dns类主要是从域名系统(DNS)中检索关于特定主机的信息,上面的代码第一行就从本地的DNS中检索出本地主机名.
IPHostEntry类则将一个域名系统或主机名与一组IP地址相关联,它与DNS类一起使用,用于获取主机的IP地址组.
要获取远程主机的IP地址,其方法也是大同小异.
在获取了IP地址后,如果还需要取得网卡的MAC地址,就需要进一步探究了.
这里又分两种情况,一是本机MAC地址,二是远程主机MAC地址.二者的获取是完全不同的.
在获取本机的MAC地址时,可以使用WMI规范,通过SELECT语句提取MAC地址.在.NET框架中,WMI规范的实现定义在System.Management命名空间中.
ManagementObjectSearcher类用于根据指定的查询检索管理对象的集合
ManagementObjectCollection类为管理对象的集合,下例中由检索对象返回管理对象集合赋值给它.
示例:
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()
}
获取远程主机的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=0i {
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=0i {
Console.WriteLine(temp[i])
}
Console.WriteLine(gi.getRemoteMac("192.168.0.3","192.168.0.1"))
}
}
可以用.Net的DNS类来获取一个主机名或一个给定主机的IP地址。要想在程序中使用DNS类,就需要包含System.Net:
Include System.Net Reference
比如说想获取http://www.mindcracker.com/的IP地址,以下代码就会完成这个任务:
// Call DNS.GetHostName to get IPHostEntry and get the IP address list.
IPHostEntry ipEntry = DNS.GetHostByName ("www.mindcracker.com")
IPAddress [] IpAddr = ipEntry.AddressList
for (int i = 0i <IpAddr.Lengthi++){
Console.WriteLine ("IP Address {0}: {1} ", i, IpAddr[i].ToString ())
}
另外,使用无参数的GetHostName可以返回本地机器的主机名:
string strHostName = DNS.GetHostName ()
然后将这个主机名作为参数传递给GetHostByName,就可以获取本地机器的IP地址信息。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)