السلام عليكم اخواني :
اريد معرفة ip كل جهاز محجوز على الشبكة حتى و لو كان الجهاز لا يعمل في تلك اللحظة
السلام عليكم اخواني :
اريد معرفة ip كل جهاز محجوز على الشبكة حتى و لو كان الجهاز لا يعمل في تلك اللحظة
اخي الكريم , يختلف الأمر إذا وجد DHCP Server في الشبكة حيث يتم اعتماد ال IP Address الذي يعطيه اياه السيرفر ولا يمكن معرفة إذا كان محجوز ام لا لأنه يتم في العادة اختيار IP عشوائي في كل مرة يعمل بها الجهاز , لكن تستطيع من خلال الكود التالي معرفة ال IP's التي تعمل الأن إذ يقوم بجلب جميع الأيبز الموجودة على الشبكة ., تستطيع عمل قاعدة بيانات لتخزين جميع هذه العناوين المستخدمة بحيث يتم تحديثها بستمرار وفي هذه الحالة تستطيع معرفة جميع العناوين المستخدمة او المحجوزة
using System;
using System.IO;
using System.Diagnostics;
using System.Net;
using System.Collections.Specialized;
namespace NetworkIPs
{
public class Names
{
public StringCollection GetNames()
{
ProcessStartInfo _startInfo = new ProcessStartInfo("net","view");
_startInfo.CreateNoWindow = true;
_startInfo.UseShellExecute = false;
_startInfo.RedirectStandardOutput = true;
Process _process = Process.Start(_startInfo);
StreamReader _reader = _process.StandardOutput;
StringCollection _machineNames = GetMachineNamesFromProcessOutput(_reader.ReadToEnd());
StringCollection _machineIPs = new StringCollection();
foreach(string machine in _machineNames)
{
_machineIPs.Add(IPAddresses(machine));
}
return _machineIPs;
}
private static string IPAddresses(string server)
{
try
{
System.Text.ASCIIEncoding ASCII = new System.Text.ASCIIEncoding();
// Get server related information.
IPHostEntry heserver = Dns.Resolve(server);
//assumin the machine has only one IP address
return heserver.AddressList[0].ToString();
}
catch
{
return "Address Retrieval error for " + server;
}
}
//string manipulations
private StringCollection GetMachineNamesFromProcessOutput(string processOutput)
{
string _allMachines = processOutput.Substring( processOutput.IndexOf("\\"));
StringCollection _machines= new StringCollection();
while(_allMachines.IndexOf("\\") != -1 )
{
_machines.Add(_allMachines.Substring(_allMachines.IndexOf("\\"),
_allMachines.IndexOf(" ",_allMachines.IndexOf("\\")) - _allMachines.IndexOf("\\")).Replace("\\",String.Empty));
_allMachines = _allMachines.Substring(_allMachines.IndexOf(" ",_allMachines.IndexOf("\\") + 1));
}
return _machines;
}
}
public class Runner
{
static void Main()
{
Names _names = new Names();
StringCollection names = _names.GetNames();
foreach(string name in names)
Console.WriteLine(name);
Console.ReadLine();
}
}
}مرحبا
إلى الاستاذ فادي:
انا جربت الكود اللي انت كاتبه بس ما أعطاني اي نتائج بس شاشة Console بدون اي نتائج .
انا جربته عندي في شبكة اللي انا بستخدمها للنت في البيت الموزع بيستخدم تقنية ADSL وموصل لواحد كابل وعنده HUB وموزع للمشتركين.
ارجوا الافاده.
شكرا..
اخي الكريم , الكود السابق يعمل 100 % إذا كانت جميع الأجهزة على الشبكة ترى بعضها البعض سوف يعطيك عنوان جهازك و عناوين جميع الأجهزة المربوطة مع ال hub ..
هل تستخدم C# 2005 لأني لم اجربه عليه ..
كم عدد الأجهزة المربوطة مع ال hub وهل تستطيع عمل ping معها ؟
اقتباساخي الكريم , الكود السابق يعمل 100 % إذا كانت جميع الأجهزة على الشبكة ترى بعضها البعض سوف يعطيك عنوان جهازك و عناوين جميع الأجهزة المربوطة مع ال hub ..هل تستخدم C# 2005 لأني لم اجربه عليه ..
كم عدد الأجهزة المربوطة مع ال hub وهل تستطيع عمل ping معها ؟
أرى الأجهزة فقط من خلال مواضع شبكة الاتصال(من على سطح المكتب) -----> عرض أجهزة مجموعة العمل
لأ - استخدم C#2003 عدد الأجهزة المربوطه 8 أجهزة - انا اصلا مش عارف IP تبع الاجهزة علشان أعمل Ping . ولهذا السبب استعمل برنامجك.
اذا كلامي فيه خطاء فهمني الصح...
شكرا..
الرجاء يا فادى اضافه comments مع كودك حتى تعم الاستفاده
وشكرا :)
اخي الكريم , في هذه الحالة يجب ان يعمل البرنامج .. عند التنفيذ لا تضغط على اي زر من الأزرار لأن ذلك سوف يلغي عملية البحث فقط انتظر من 10 الى 20 ثانية وسيتم عرض العناوين لأجهزة على التوالي كما في الشكل التالي :
اقتباسالرجاء يا فادى اضافه comments مع كودك حتى تعم الاستفادهوشكرا
إن شاء الله :) , على اي حال يوجد تعليق موضح في الكود عند كل مرحلة من المراحل :rolleyes: .. وسوف اقوم بإضافة تعليقات وتحسينات إضافية إن شاء الله.. مع العلم ان اغلب الكود تم شرحه في سلسلة دروس تعلم برمجة الشبكات في الدرس الخاص بال DNS Programming مثل ال IPHostEntry و ال Dns.Resolve , على اي حال يتم جلب ال host names من ProcessStartInfo من خلال الخاصية StandardOutput إذ يتم تحويله إلى host name من خلال الميثود GetMachineNamesFromProcessOutput ثم تخزينها في Collicaion ثم يتم تحويل الأسماء إلى عناوين من خلال الميثود Dns.Resolve .. طبعا يتم استخدام ال StreamReader لقرائة ال collection الخاص بال ProcessStartInfo
جزاك الله خير يا استاذ فادي
انا فعلا انتظرت حوالي من 10 -20 ثانية وظهرت IPs فعلاً وانظر الصورة المرفقه بس في حاجات غريبة ظهرت بدل IPs كتب على حاجات error.
على العموم شكرا كتير.
بسم الله الرحمن الرحيم
أتمنى من الله أن تقبلو من هذه المداخلة
يقوم نظام التشغيل ويندوز بحفظ جميع العنواين في ActiveDirectory يعني أي حاسب نقوم بتشغيله لمره واحدة نستطيع أن نتعرف عليه ولوكان الجهاز طفئ طالما جهازن الذي نعمل عليه لم يطفئ أي لم نقوم بإغلاق الـ Session الحالية
ولكتابة هذا الكود في الـ #C
يجب علينا أن نضع مرجع للمكتبة التي تسمى System.DirectoryServices.dll وهي تأتي مع مكتبة الدوت نت
ومن ثم نكتب مايلي:
m_NetworkPCListView.Items.Clear();
DirectoryEntry ParentEntry = new DirectoryEntry();
try
{
ParentEntry.Path = "WinNT:";
foreach (DirectoryEntry childEntry in ParentEntry.Children)
{
TreeNode newNode = new TreeNode(childEntry.Name);
switch (childEntry.SchemaClassName)
{
case "Domain":
DirectoryEntry SubParentEntry = new DirectoryEntry();
SubParentEntry.Path = "WinNT://" + childEntry.Name;
foreach (DirectoryEntry SubChildEntry in SubParentEntry.Children)
{
switch (SubChildEntry.SchemaClassName)
{
case "Computer":
if (!SubChildEntry.Name.Equals(HostName))
{
ListViewItem PCItem = new ListViewItem(SubChildEntry.Name);
PCItem.ImageIndex = 1;
PCItem.StateImageIndex = 1;
PCItem.StateImageIndex = 1;
m_NetworkPCListView.Items.Add(PCItem);
}
break;
}
}
break;
}
}
}
catch
{
MessageBox.Show(this, "Error While Reading Directories.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
ParentEntry = null;
this.Cursor = Cursors.Default;
}أرجو من الله التوفيق للجميع وأن نكون قد أدركنا غايتنا
لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله
اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا
كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي
أخوكم في الله أبو المجد
هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)
التوقيت في دمشق:
<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">
اخي mamoud ارجو توضيح طبيعة الأخطاء التي ظهرت لك حتى اتمكن من حل المشكلة ..
اشكر الأخ إسماعيل عنجريني و الأخ TarekNajem04 على هذا الأمثلة الرائعة
حياك الله أخي الكريم على مواضيعك المفيدة
لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله
اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا
كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي
أخوكم في الله أبو المجد
هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)
التوقيت في دمشق:
<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">
مسا الخير...
أستاذ فادي
تظهر الشاشه وبها IP بعض الاجهزة و البعض الاخر لا تظهر IP بل تظهر اسم الجهاز وبجانبه هذه الرسالة وهي كالتالي:
اقتباسAddress Retrieval error for SMART
SMART: اسم الكمبيوتر ( المشترك)
حاول أن تقوم بتجريب هذا الكود الموجودة في المشاركة رقم 11 في نفس الموضوع
لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله
اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا
كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي
أخوكم في الله أبو المجد
هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)
التوقيت في دمشق:
<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">
ارجو التأكد من نظام التشغيل الذي يعمل على هذه الأجهزة فهل هو XP أو غير ذلك
مسا الخير
اقتباسحاول أن تقوم بتجريب هذا الكود الموجودة في المشاركة رقم 11 في نفس الموضوع
TarekNajem04 انا حاولت تجريب المشاركة رقم 11 ولكن طلعلي اخطاء كتير معرفتش احل اي حاجة منها لقلة خبرتي في هذا المجال.
اقتباسارجو التأكد من نظام التشغيل الذي يعمل على هذه الأجهزة فهل هو XP أو غير ذلك
يعني لو نظام التشغيل 98 أو Me أو 2000 أو 95 أو حتى لينكس أو 2003 مش هيظهر IPs
ودي كانت أول حاجه...
تاني حاجه وهي انا مقدرش اعرف أنظمة التشغيل اللي هم شغالين عليها لأنو لو سألتهم يقولوا ليه هجاوب بجرب برنامج بيعرف IP هيحسبوا اني عاوز اعمل عليهم هكر ويعمولولي قضية أمن دوله وكل واحد ما الكمبيوتر بتاعوا يخترق ولا الويندوز يضرب يلومني ويقول انت اللي عارف IP بتاعي... بس الجهاز اللي انا كتبت اسمة وهو SMART فعلا عليه ويندوز 98 ...
بسم الله الرحمن الرحيم
حين ترى أن هناك إستخدام لأكتف دايركتري فعل أن النظام الذ ي نتحدث عنه نظام NT مثل Windows 2000 أو Windows XP
أخي الكريم إذا كان برنامجك Client & Server فقم في بدأ التشغيل البرنامج إرسال رسالة Broscast على الشبكة لبورت معين تخبر الـ Server بأن العميل قد بدأ بالعمل أو بالعكس أن ترسل رسالة من Server لتخبر العميل بأن الـ Server قد بدأ بالعمل
مثل:
public override int SendInfo(IPAddress to, int port)
{
if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
return 0;
try
{
IPEndPoint RemoteEndPoint = new IPEndPoint(IPAddress.Broadcast, port);
Socket SenderSocket = new Socket(RemoteEndPoint.Address.AddressFamily,
SocketType.Dgram,
ProtocolType.Udp);
SenderSocket.EnableBroadcast = true;
SenderSocket.SendBufferSize = int.MaxValue;
SenderSocket.SendTimeout = 1000;
byte[] data = new byte[]{2}; // على سبيل المثال رقم 2 يعني أن العميل قد أقلع
int CountSend = SenderSocket.SendTo(data, SocketFlags.Broadcast, RemoteEndPoint);
SenderSocket.Close();
return CountSend;
}
catch
{
return 0;
}
finally
{
}وفي برنامج عندما تستقبل هذه الرسالة تقوم وتقوم بالتعرف أنها رسالة من العميل تقوم بحفظ الأ يبي تبع الجهاز المرسل
أو تلجأ لموضع الـ Multicast
يعني بدك تتعب شوي إذا أنت قد إبتليت في برنامج
أضغط على الرابط ستجد دروس غنية لأستاذنا الكبير تتحدث عن برمجة الشبكات
أتمنى لك التوفيق
لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله
اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا
كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي
أخوكم في الله أبو المجد
هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)
التوقيت في دمشق:
<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">
اخ فادي عبد القادر
برنامج جميل جدا و حاولت فهم محتواه لكن الجزء المتعلق بـ (private static string IPAddresses(string server)) ما فهمته و خصوصا انك معرف سيرفر هل المقصود بالسيرفر .. اللي بوزع الايبي ادريس DNS خصوصا انه عندي رواتر و حسب معرفتي انه الرواتر اله ايبي ادريس فليش ما بظهر مع باقي الايبيات ....
ثانيا عندي طلب اكيد بتعرف طبيعة شغل ARP مسج
بالغالب استعاملها للحصول على الماك ادريس لباقي الاجهزة بوجود الايبي ادريس ... بما انا قدرنا نجمع الايبي ادريس فلازمني اعرف الماك ادريس للاجهزة
فهل ممكن تساعدني
و شكرا
يا عم انت مغلب نفسك ليه ..
اعمل ping على الجهاز اللى ظاهر عندك في الشبكة باسمه والنتيجة هتديك الـ IP بتاعه .. خلص .. lol
وبعدين انت عايز تعرف الآي بي ليه .. إوعى تكون ناوي على حاجة مش تمام :D
اقتباسيقوم نظام التشغيل ويندوز بحفظ جميع العنواين في ActiveDirectory يعني أي حاسب نقوم بتشغيله لمره واحدة نستطيع أن نتعرف عليه ولوكان الجهاز طفئ طالما جهازن الذي نعمل عليه لم يطفئ أي لم نقوم بإغلاق الـ Session الحالية
الأخ طارق ..
ممكن توضح النقطة دية ؟
حسب علمي .. تقنية الـ AD تعما في شبكات الـ Server / Client ..
System Administrator