में नेटवर्क पर कोई डिवाइस नेटवर्क पर है या नहीं, मैं घर सुरक्षा एप्लिकेशन विकसित कर रहा हूं। एक चीज जो मैं करना चाहता हूं वह स्वचालित रूप से इसे बंद कर देती है और इस आधार पर कि मैं घर पर हूं या नहीं। मेरे पास वाईफ़ाई वाला फ़ोन है जो घर पर होने पर स्वचालित रूप से मेरे नेटवर्क से कनेक्ट होता है।पिंग या अन्यथा बताएं कि मैक द्वारा सी #
फ़ोन कनेक्ट और डीएचसीपी के माध्यम से अपना पता प्राप्त करता है। जबकि मैं इसे एक स्थिर आईपी का उपयोग करने के लिए कॉन्फ़िगर कर सकता था, मैं नहीं चाहता था। क्या सी #/.NET में कोई भी 'पिंग' या समकक्ष है जो किसी डिवाइस के मैक पते को ले सकता है और मुझे बता सकता है कि यह वर्तमान में नेटवर्क पर सक्रिय है या नहीं?
संपादित करें: स्पष्ट करने के लिए, मैं एक पीसी है कि मैं एक ही लैन पर फोन का पता लगाने के लिए सक्षम हो करना चाहते हैं पर सॉफ्टवेयर चल रहा हूँ।
संपादित करें: यहां कोड है जो मैं आया था, स्पोलसन की मदद के लिए धन्यवाद। यह भरोसेमंद रूप से पता लगाता है कि मेरे द्वारा रुचि रखने वाले किसी भी फोन में घर में हैं या नहीं।
private bool PhonesInHouse()
{
Ping p = new Ping();
// My home network is 10.0.23.x, and the DHCP
// pool runs from 10.0.23.2 through 10.0.23.127.
int baseaddr = 10;
baseaddr <<= 8;
baseaddr += 0;
baseaddr <<= 8;
baseaddr += 23;
baseaddr <<= 8;
// baseaddr is now the equivalent of 10.0.23.0 as an int.
for(int i = 2; i<128; i++) {
// ping every address in the DHCP pool, in a separate thread so
// that we can do them all at once
IPAddress ip = new IPAddress(IPAddress.HostToNetworkOrder(baseaddr + i));
Thread t = new Thread(() =>
{ try { Ping p = new Ping(); p.Send(ip, 1000); } catch { } });
t.Start();
}
// Give all of the ping threads time to exit
Thread.Sleep(1000);
// We're going to parse the output of arp.exe to find out
// if any of the MACs we're interested in are online
ProcessStartInfo psi = new ProcessStartInfo();
psi.Arguments = "-a";
psi.FileName = "arp.exe";
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
bool foundone = false;
using (Process pro = Process.Start(psi))
{
using (StreamReader sr = pro.StandardOutput)
{
string s = sr.ReadLine();
while (s != null)
{
if (s.Contains("Interface") ||
s.Trim() == "" ||
s.Contains("Address"))
{
s = sr.ReadLine();
continue;
}
string[] parts = s.Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries);
// config.Phones is an array of strings, each with a MAC
// address in it.
// It's up to you to format them in the same format as
// arp.exe
foreach (string mac in config.Phones)
{
if (mac.ToLower().Trim() == parts[1].Trim().ToLower())
{
try
{
Ping ping = new Ping();
PingReply pingrep = ping.Send(parts[0].Trim());
if (pingrep.Status == IPStatus.Success)
{
foundone = true;
}
}
catch { }
break;
}
}
s = sr.ReadLine();
}
}
}
return foundone;
}
यह प्रश्न आपको http://stackoverflow.com/questions/1148778/how-do-i-access-arp-protocol-Information-through-net की मदद कर सकता है। यह आपको आईएसी से मैक प्राप्त करने में मदद करेगा। या "arp -a" का उपयोग करें और आउटपुट पार्स करें। –
क्या आप इसे दूसरी तरफ कर सकते हैं? जैसा कि आपके फोन पर एक एप्लिकेशन है जो यह पता लगाता है कि यह घर नेटवर्क पर कब होता है और फिर घर पर आपके एप्लिकेशन को बताता है कि यह सीमा के भीतर है? आम तौर पर जब आप कनेक्ट होते हैं तो आपको फ़ोन को सूचित करने के लिए फोन मिल सकता है। – jvilalta
क्या यह स्क्रिप्ट का अंतिम संस्करण था? – cDima