Issue
Code backup
This commit is contained in:
+142
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Linq;
|
||||
using System.Collections;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace devlist
|
||||
{
|
||||
public class IPEnumeration: IEnumerable
|
||||
{
|
||||
private string startAddress;
|
||||
private string endAddress;
|
||||
|
||||
internal static Int64 AddressToInt(IPAddress addr)
|
||||
{
|
||||
byte[] addressBits = addr.GetAddressBytes();
|
||||
|
||||
Int64 retval = 0;
|
||||
for (int i = 0; i < addressBits.Length; i++)
|
||||
{
|
||||
retval = (retval << 8) + (int)addressBits[i];
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
internal static Int64 AddressToInt(string addr)
|
||||
{
|
||||
return AddressToInt(IPAddress.Parse(addr));
|
||||
}
|
||||
|
||||
internal static IPAddress IntToAddress(Int64 addr)
|
||||
{
|
||||
return IPAddress.Parse(addr.ToString());
|
||||
}
|
||||
|
||||
|
||||
public IPEnumeration(string startAddress, string endAddress)
|
||||
{
|
||||
this.startAddress = startAddress;
|
||||
this.endAddress = endAddress;
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return (IEnumerator) GetEnumerator();
|
||||
}
|
||||
|
||||
public IPEnumerator GetEnumerator()
|
||||
{
|
||||
return new IPEnumerator(startAddress, endAddress);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class IPEnumerator: IEnumerator
|
||||
{
|
||||
private string startAddress;
|
||||
private string endAddress;
|
||||
private Int64 currentIP;
|
||||
private Int64 endIP;
|
||||
|
||||
public IPEnumerator(string startAddress, string endAddress)
|
||||
{
|
||||
this.startAddress = startAddress;
|
||||
this.endAddress = endAddress;
|
||||
|
||||
currentIP = IPEnumeration.AddressToInt(startAddress);
|
||||
endIP = IPEnumeration.AddressToInt(endAddress);
|
||||
}
|
||||
|
||||
public bool MoveNext()
|
||||
{
|
||||
currentIP++;
|
||||
return (currentIP <= endIP);
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
currentIP = IPEnumeration.AddressToInt(startAddress);
|
||||
}
|
||||
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get
|
||||
{
|
||||
return Current;
|
||||
}
|
||||
}
|
||||
|
||||
public IPAddress Current
|
||||
{
|
||||
get
|
||||
{
|
||||
try
|
||||
{
|
||||
return IPEnumeration.IntToAddress(currentIP);
|
||||
}
|
||||
catch (IndexOutOfRangeException)
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class IPHelper
|
||||
{
|
||||
[DllImport("iphlpapi.dll", ExactSpelling=true)]
|
||||
public static extern int SendARP( int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);
|
||||
|
||||
public static string getMAC(IPAddress address)
|
||||
{
|
||||
int intAddress = BitConverter.ToInt32(address.GetAddressBytes(), 0);
|
||||
|
||||
byte[] macAddr = new byte[6];
|
||||
uint macAddrLen = (uint) macAddr.Length;
|
||||
if (SendARP(intAddress, 0, macAddr, ref macAddrLen) != 0)
|
||||
return "(NO ARP result)";
|
||||
|
||||
string[] str = new string[(int)macAddrLen];
|
||||
for (int i = 0; i < macAddrLen; i++)
|
||||
str[i] = macAddr[i].ToString("x2");
|
||||
|
||||
return string.Join(":", str);
|
||||
}
|
||||
}
|
||||
|
||||
class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
|
||||
foreach(IPAddress addr in new IPEnumeration("172.25.216.10","172.25.216.20"))
|
||||
{
|
||||
Console.WriteLine("{0}\t\t{1}",addr.ToString(), IPHelper.getMAC(addr));
|
||||
}
|
||||
|
||||
Console.ReadKey(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user