I have 4 Ethernet interfaces in my computer (getting the information by ipconfig /all)
For example:
1) IP: 192.168.15.161, MAC: 00-E2-4C-98-18-89
2) IP: 172.168.11.126, MAC: 00-FF-4C-98-18-44
3) IP: 10.0.13.136, MAC: 00-EE-89-98-13-44
4) IP: 195.22.18.146, MAC: 00-12-89-98-13-33
I need a function that returns the MAC address when given IP.
For example getMacByIP("192.168.15.161")
will return "00-E2-4C-98-18-89"
Using arp
is not working for local!
For example arp -a
will not give the local address with MAC
So all the questions/answers like here are not helping me.
I've searched a lot over the internet before asking this question.
EDIT:
This answer: (link) not helping me
public static string GetMacAddressUsedByIp(string ipAddress)
{
var ips = new List<string>();
string output;
try
{
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = "ipconfig";
p.StartInfo.Arguments = "/all";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
}
catch
{
return null;
}
// pattern to get all connections
var pattern = @"(?xis)
(?<Header>
(\r|\n) [^\r]+ : \r\n\r\n
)
(?<content>
.+? (?= ( (\r\n\r\n)|($)) )
)";
List<Match> matches = new List<Match>();
foreach (Match m in Regex.Matches(output, pattern))
matches.Add(m);
var connection = matches.Select(m => new
{
containsIp = m.Value.Contains(ipAddress),
containsPhysicalAddress = Regex.Match(m.Value, @"(?ix)Physical \s Address").Success,
content = m.Value
}).Where(x => x.containsIp && x.containsPhysicalAddress)
.Select(m => Regex.Match(m.content, @"(?ix) Physical \s address [^:]+ : \s* (?<Mac>[^\s]+)").Groups["Mac"].Value).FirstOrDefault();
return connection;
}
Because if I'm using, for example, Chinese version of Windows, the Regex will not work!