/// <summary>
/// 로컬 IP를 구해온다.
/// </summary>
/// <param name="index">랜카드 인덱스</param>
/// <returns>IP</returns>
public static string GetLocalIp(int index)
{
return System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[index].ToString();
}
/// <summary>
/// 첫번째 로컬 IP를 구해온다.
/// </summary>
/// <returns>IP</returns>
public static string GetLocalIp()
{
return GetLocalIp(0);
}
/// <summary>
/// IP Address에 해당하는 Mac Address를 가져온다.
/// </summary>
/// <param name="ip">찾고자 하는 IP Address</param>
/// <returns>Mac Address</returns>
public static string GetMacAddress(string ip)
{
string rtn = string.Empty;
ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
foreach (ManagementObject mo in query1.Get())
{
string[] address = (string[])mo["IPAddress"];
if (address[0] == ip && mo["MACAddress"] != null)
{
rtn = mo["MACAddress"].ToString();
break;
}
}
return rtn;
}
/// <summary>
/// 첫번째 IPv4 값을 가져온다.
/// </summary>
/// <returns>못찾으면 null</returns>
public string GetFirstIPv4()
{
Regex regex = new Regex(@"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$");
foreach (System.Net.IPAddress ip in System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList)
{
if (regex.IsMatch(ip.ToString()))
{
return ip.ToString();
}
}
return null;
}
추가사항 2010-07-02 :
Windows XP 이상의 OS에서는 IPv6를 사용해서
예상하고 있었던 IPv4 IP 주소값을 가져오지 못했다.
간단히 정규식 추가하여 찾도록 GetFirstIPv4()추가하였음.



감사합니다.^^
블로그가 완전 라이브러리네요..
근데 나중에 블로그 폭파하시면 안됩니다. ^o^;;;
제가 머리가 나빠서 이렇게라도 정리하지 않으면 자꾸 까먹어서요.
폭파하면 저도 곤란해져요.. ^^
감사합니다!!
근데 .. using으로 네임스페이스 선언은 멀로해줘야하는지...ㅠㅠ
블로그가 강좌사이트가 아니라 개인적으로 정리하는 공간이라
내용이 좀 무성의 합니다. ^^;
참조추가에서 .NET 탭의 System.Management 추가해 주시구요..
아래의 namespace를 사용하시면 됩니다.
using System.Text.RegularExpressions;
using System.Management;
현제 c#을 공부하고있는 학생입니다!
감사합니다! 덕분에 macaddress를 얻을수 있게 되었습니다!
질문이있습니다!... 너무 초보적인 질문일수도 있지만...
wol 기능 때문에 mac address를 받아 byte 단위로 처리하려고 하는데
byte값으로 받아올수 있는 방법이 없을까요...?
아니면 결과값이 대충 AA:AA:AA:AA:AA:AA 로 나오는데 ":" 를 지울수 있는 방법은 없는건가요... ㅜㅜ
죄송합니다 ㅜㅜ
일단 아래와 같이 짜봤습니다. 의도하신 코드가 맞는지 모르겠네요..
// 맥어드레스
string macAdr = "AA:AA:AA:AA:AA:AA";
// 콜론제거
Console.WriteLine(macAdr.Replace(":", "")); // AAAAAAAAAAAA
// 문자열 배열로 변환
string[] arr = macAdr.Split(':');
Console.WriteLine(string.Join(",", arr)); // AA,AA,AA,AA,AA,AA
// 바이트 배열로 변환 byteList = new List ();
List
byteList.AddRange(macAdr.Split(':').Select(a => Convert.ToByte(a, 16)));
Console.WriteLine(string.Join(",", byteList)); // 170,170,170,170,170,170