PDA

View Full Version : پیداکردن IP های فعال در شبکه



majidrezaei2007
پنج شنبه 02 شهریور 1391, 19:35 عصر
با عرض سلام خدمت اساتید گرامی

می خواستم بدونم که یافتن IP های فعال یک شبکه به چه صورت انجام میشه ؟
شبکه هم یک شبکه ساده هست و IP ها هم به صورت static هست
ضمنا IPv4 رو می خوام .
زیاد گشتم ، مطلب هم زیاد بود ، اما هیچکدوم جواب نداد و فقط بعضیاشون IP سیستم خودمو نشون میده فقط.

ممنون میشم از راهنماییتون

behzad1986
پنج شنبه 02 شهریور 1391, 20:17 عصر
دوست عزیز
ببین این کد جواب میده

string sHostName = Dns.GetHostName();
IPHostEntry ipE = Dns.GetHostByName(sHostName);
IPAddress[] IpA = ipE.AddressList;
for (int i = 0; i < IpA.Length; i++)
{
MessageBox.Show( IpA[i].ToString());
}

majidrezaei2007
پنج شنبه 02 شهریور 1391, 20:24 عصر
نه متاسفانه ، فقط IP سیستم خودمو میده .
2 تا دیگه هست که اونا رو نشون نمیده

behzad1986
پنج شنبه 02 شهریور 1391, 20:39 عصر
با اسمشون کارت راه نمیفته؟

using System.IO;
using System.Diagnostics;




public void AllComputerName()
{

Process netUtility = new Process();

netUtility.StartInfo.FileName = "net.exe";

netUtility.StartInfo.CreateNoWindow = true;

netUtility.StartInfo.Arguments = "view";

netUtility.StartInfo.RedirectStandardOutput = true;

netUtility.StartInfo.UseShellExecute = false;

netUtility.StartInfo.RedirectStandardError = true;

netUtility.Start();



StreamReader streamReader = new StreamReader(netUtility.StandardOutput.BaseStream, netUtility.StandardOutput.CurrentEncoding);



string line = "";

while ((line = streamReader.ReadLine()) != null)
{

if (line.StartsWith("\\"))
{

MessageBox.Show (line.Substring(2).Substring(0, line.Substring(2).IndexOf(" ")).ToUpper());

}

}

streamReader.Close();
netUtility.WaitForExit(1000);
}

majidrezaei2007
پنج شنبه 02 شهریور 1391, 21:29 عصر
ممنون . این جواب داد . اما IP لازم دارم ، چون که IP هم دریافت می کنم . آیا میشه باز اینو تبدیل کرد به IP ?

ضمنا این تمام نام هایی که به این کامپیوتر وصل شدن رو میاره . کلا از اول که ویندوز نصب شده ، هرچی بهش وصل شدن رو میاره . اگه یکیشون فعال (خاموش) هم نباشه ، بازم میاره .

Farshid007
پنج شنبه 02 شهریور 1391, 21:51 عصر
اینو تست کن:
foreach (System.Net.NetworkInformation.NetworkInterface N in System.Net.NetworkInformation.NetworkInterface.Get AllNetworkInterfaces())
{
listBox1.Items.Add(N.GetIPProperties().DnsAddresse s[0]);
}

majidrezaei2007
پنج شنبه 02 شهریور 1391, 22:28 عصر
ممنون فرشید جان . آره یکی شما جواب داد ، منتها باز این IPv6 بر می گردونه . مجبور شدم با استفاده از Name آنها ، IP شونو پیدا کردم و مشکل حل شد .
تشکر بسیار زیاد از همه دوستان ، کد هامو (با کمک دوستان) هم می زارم ایشالله که استفاده بشه . با استفاده از یک دیتاگرید ویو ، هم نام و هم IP رو بدست میارم .

public void AllComputerName(ref DataGridView IPLIST)
{
int i=0;
Process netUtility = new Process();
netUtility.StartInfo.FileName = "net.exe";
netUtility.StartInfo.CreateNoWindow = true;
netUtility.StartInfo.Arguments = "view";
netUtility.StartInfo.RedirectStandardOutput = true;
netUtility.StartInfo.UseShellExecute = false;
netUtility.StartInfo.RedirectStandardError = true;
netUtility.Start();
StreamReader streamReader = new StreamReader(netUtility.StandardOutput.BaseStream, netUtility.StandardOutput.CurrentEncoding);
string line = "";
while ((line = streamReader.ReadLine()) != null)
{
if (line.StartsWith("\\"))
{
i=IPLIST.Rows.Add();
IPLIST[0, i].Value = line.Substring(2).Substring(0, line.Substring(2).IndexOf(" ")).ToUpper();
IPLIST[1, i].Value = HostNameToIP(line.Substring(2).Substring(0, line.Substring(2).IndexOf(" ")).ToUpper());
}
}
streamReader.Close();
netUtility.WaitForExit(1000);
}


public static string HostNameToIP(string hostName)
{
IPHostEntry iphost = System.Net.Dns.GetHostEntry(hostName);
IPAddress[] addresses = iphost.AddressList;
StringBuilder addressList = new StringBuilder();
foreach (IPAddress address in addresses)
{
if (address.ToString().Contains("."))
{
addressList.AppendFormat(address.ToString());
}

}
return addressList.ToString();
}

majidrezaei2007
پنج شنبه 02 شهریور 1391, 22:35 عصر
از این هم میشه استفاده کرد ضمنا که خلاصه تره . منتها این لیست تمامی سیستم هایی رو بر می گردونه که sql روشون نصب باشه ولی قبلی همه رو میاره

DataTable d = new DataTable();
d = System.Data.Sql.SqlDataSourceEnumerator.Instance.G etDataSources();
dataGridView1.DataSource = d;

mazaher_bazari
جمعه 03 شهریور 1391, 11:12 صبح
سلام.
بهترین روش اینه که شما ابتدا یک پیام پینگ رو به صورت broadcast به شبکه بفرستید هر کی on بود پاسخشو به شما میده و شما میتونید از روی پاسخ اون پیام ip اونو
بگیرید/

AmirGhasemi
جمعه 03 شهریور 1391, 14:39 عصر
سلام خدا و ما بر مظاهر عزيز
داداش همين پيام پينگ را توي كدنويسي چطور شبيه سازي كنيم؟ قطعه كدي اگه داري لطف كن برامون بذار

mazaher_bazari
جمعه 03 شهریور 1391, 17:59 عصر
سلام خدا و ما بر مظاهر عزيز
داداش همين پيام پينگ را توي كدنويسي چطور شبيه سازي كنيم؟ قطعه كدي اگه داري لطف كن برامون بذار

شما ابتدا باید subnet رو پیدا کنی بعد به همه ادرسهای مربوط به اون subnet پینگ کنی بهتره که subnet از کلاس C باشه.
کلاس پینگ و دستوراتشم تو system.net.networkinformation هستش.
لازم به ذکر هست که پینگ در صورتی کار میکنه که فایروال های مقصد خاموش باشن در غیر این صورت هیچ جوابی رو از سیستم های روشن نمیگیره

راستش برای من هم همین مشکل پیش اومده بود که برای همه ی سیستم های دیگه یه برنامه نوشتم و با کمک اون برنامه از روشن بودن یا خاموش بودن سیستم متوجه میشدم.

majidrezaei2007
جمعه 03 شهریور 1391, 23:23 عصر
سلام.
بهترین روش اینه که شما ابتدا یک پیام پینگ رو به صورت broadcast به شبکه بفرستید هر کی on بود پاسخشو به شما میده و شما میتونید از روی پاسخ اون پیام ip اونو
بگیرید/

بله دقیقا همینه . اون روش دوم (System.Data.Sql.SqlDataSourceEnumerator.Instance. GetDataSources()) که گفتم ، مکانیزمش همین ارسال یک بسته به صورت broadcast هست . و نتیجه هم یک دیتا تیبل هست که شامل لیست سرور های فعاله

majidrezaei2007
جمعه 03 شهریور 1391, 23:24 عصر
بله دقیقا همینه . اون روش دوم (System.Data.Sql.SqlDataSourceEnumerator.Instance. GetDataSources()) که گفتم ، مکانیزمش همین ارسال یک بسته به صورت broadcast هست . و نتیجه هم یک دیتا تیبل هست که شامل لیست سرور های فعاله

HAMRAHSOFT.IR
یک شنبه 19 خرداد 1392, 12:14 عصر
ممنون فرشید جان . آره یکی شما جواب داد ، منتها باز این IPv6 بر می گردونه . مجبور شدم با استفاده از Name آنها ، IP شونو پیدا کردم و مشکل حل شد .
تشکر بسیار زیاد از همه دوستان ، کد هامو (با کمک دوستان) هم می زارم ایشالله که استفاده بشه . با استفاده از یک دیتاگرید ویو ، هم نام و هم IP رو بدست میارم .

public void AllComputerName(ref DataGridView IPLIST)
{
int i=0;
Process netUtility = new Process();
netUtility.StartInfo.FileName = "net.exe";
netUtility.StartInfo.CreateNoWindow = true;
netUtility.StartInfo.Arguments = "view";
netUtility.StartInfo.RedirectStandardOutput = true;
netUtility.StartInfo.UseShellExecute = false;
netUtility.StartInfo.RedirectStandardError = true;
netUtility.Start();
StreamReader streamReader = new StreamReader(netUtility.StandardOutput.BaseStream, netUtility.StandardOutput.CurrentEncoding);
string line = "";
while ((line = streamReader.ReadLine()) != null)
{
if (line.StartsWith("\\"))
{
i=IPLIST.Rows.Add();
IPLIST[0, i].Value = line.Substring(2).Substring(0, line.Substring(2).IndexOf(" ")).ToUpper();
IPLIST[1, i].Value = HostNameToIP(line.Substring(2).Substring(0, line.Substring(2).IndexOf(" ")).ToUpper());
}
}
streamReader.Close();
netUtility.WaitForExit(1000);
}


public static string HostNameToIP(string hostName)
{
IPHostEntry iphost = System.Net.Dns.GetHostEntry(hostName);
IPAddress[] addresses = iphost.AddressList;
StringBuilder addressList = new StringBuilder();
foreach (IPAddress address in addresses)
{
if (address.ToString().Contains("."))
{
addressList.AppendFormat(address.ToString());
}

}
return addressList.ToString();
}


امکان داره یک نمونه اجرای قرار بدید؟

HAMRAHSOFT.IR
یک شنبه 26 خرداد 1392, 14:07 عصر
دوستان که باین کدها کار کردن امکان داره یک نمونه اجرای قرار بدن