Hallo zusammen,
ich versuche anhand des Hostnamen die IP Adresse auszulesen - das klappt auch wunderbar.
Dann möchte ich mit Hilfe dieser IP Adresse die Mac Adresse auslesen, hier bekomme ich als Wert allerdings immer nur 00-00-00-00-00-00.
Lasse ich das Feld Hostname leer bekomme ich allerdings irgendeine IP und die dazugehörige Mac Adresse richtig ausgelesen..
Kann mir einer kurz nen Tipp geben, wo der Fehler liegt?
Danke und viele Grüße
Dennis
public partial class Form1 : Form
{
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);
[DllImport("iphlpapi.dll", ExactSpelling = true)]
public static extern int SendARP(int DestIP, int SrcIP, [Out] byte[] pMacAddr, ref int PhyAddrLen);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//IP Adresse anhand des Hostnamen herausfinden
String DnsName;
DnsName = TXT_Computername.Text;
System.Net.IPHostEntry IHE = System.Net.Dns.Resolve(DnsName);
string[] IP = new string[IHE.AddressList.Length];
for (int i = 0; i < IHE.AddressList.Length; i++)
IP[i] = IHE.AddressList[i].ToString();
TXT_IP.Text = IP.GetValue(0).ToString();
//Mac Adresse anhand der IP herausfinden
IPAddress ip = IPAddress.Parse(IP.GetValue(0).ToString());
byte[] ab = new byte[6];
int len = ab.Length;
int r = SendARP((int)ip.Address, 0, ab, ref len);
string mac = BitConverter.ToString(ab, 0, 6);
TXT_Mac.Text = mac;
}
catch (Exception)
{
TXT_IP.Text = "";
TXT_Mac.Text = "Host not available";
}
}
EDIT: Funktioniert nur teilweise nicht, ARP ist nicht Routingfähig so wie ich gelesen habe. Gibt es eine Alternative dazu?
Hi,
ARP ist nicht routingfähig. Der MAC Header wird bei jedem HOP über einen Router durch dessen MAC Header überschrieben. D.h. Wenn Du Hosts außerhalb Deines Netzes kontaktierst, steht im MAC Header der Datenpakete im Idealfall die MAC-Adresse des Routers über den Du gehst. Die MAC Adresse anderer Systeme kannst Du somit nicht eindeutig ermitteln. OK ich denke, Du könntest die MAC Adresse von Windows clients z.B. über WMI ermitteln, oder so...aber das hilft dir nicht was ?
Hi,
danke für die Erklärung.
An WMI hatte ich auch schon gedacht, aber was würde man mit Linux Maschinen machen?
D.h. ich müsste noch eine Unterscheidung reinbringen ob es eine Linux oder Windows Maschine ist... (:
Viele Grüße
Dennis
Wofür benötigst du die mac adresse denn genau? Vielleicht gibt's ja noch eine andere Lösung.
Die Adresse wäre nicht das beste wenn du eine eindeutige indentifizierung eines systems neben der ip suchst. Denn nicht alle windows clients antworten auf wmi Anfragen wenn wmi z.B deaktiviert ist. Derartige Möglichkeiten gibt's auch unter linux, aber auch nur wenn die entsprechenden services laufen und erreichbar sind, was optional ist. Du kannst also die mac nur über Umwege ermitteln, die unter Umständen nicht zur verfügung stehen.
Hi,
ich programmiere ein Administrationsprogramm, das Funktionalitäten von Look@Lan und anderen Programmen beinhalten soll. (Als Übungsprojekt)
Ich weiß, dass die Mac Adressen in den ARP Tabellen der Router zu sehen sind,
aber mein Ausbilder erlaubt mir nicht die da auszulesen.
Eine Möglichkeit wäre noch in jedem Subnetz eine Art "Sender" aufzustellen,
der dann den ARP Broadcast sendet, aber das würde bedeuten, dass ich nur bei uns im Firmennetzwerk per Knopfdruck die Mac Adressen auslesen kann.
Sobald ich mit dem Tool zum Kunden fahren würde, würde es da dann nicht mehr ohne weiteres funktionieren, zumindest nicht, ohne dass ich dort wieder die "Sender" aufgestellt hätte.
Hi,
Ich weiß, dass die Mac Adressen in den ARP Tabellen der Router zu sehen sind,
aber mein Ausbilder erlaubt mir nicht die da auszulesen.
Aber auch nur die der Hosts in direkt angeschlossenen Netzen.
huhu,
schick selbst ein ARP Paket mit deinem Programm ins Netz und lausch auf die Antworten. Damit hast Du zwar deinen Sender, aber ein ARP-Broadcast ist in jedem Netz erlaubt.
iphlpapi.dll hilft dir unter Linux leider auch nichts.
Evtl. mit WinPCap einfach das Netzwerk abhören.
.Net kann zwar viel, ist aber durch die gekapselte Umgebung auch beschränkt - und ARP gehört eigentlich eher zu Treibern denn zu Programmen.
😃
Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Hi,
...dann kannst Du das Projekt nicht lösen. Um wirklich an die alle MAC-Adressen aus einem Netz zu kommen gibt es nur ein paar Möglichkeiten die stabil wären, und für diesen Zweck viel zu aufwändig sind.