using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Management;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.NetworkInformation;
using System.Threading;
namespace WindowsApplication1
{
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
String myHost = Dns.GetHostName();
//String myHost = "www.yandex.ru";
//IPAddress ip_serv = new IPAddress(192.168.1.100);
//IPHostEntry myHostEntry = Dns.GetHostByAddress("192.168.1.100");
IPHostEntry myHostEntry = Dns.GetHostByName(myHost);
IPAddress[] IPList = myHostEntry.AddressList;
/*foreach (IPAddress ip in IPList)
{
listBox1.Items.Add(ip.ToString());
}*/
//listBox1.Items.Add(myHost);
IPAddress first=GetFirst(IPList[0]);
listBox1.Items.Add(first);
listBox1.Items.Add(GetNext(first));
/*if (args.Length == 0)
throw new ArgumentException ("Ping needs a host or IP Address.");*/
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
// Use the default Ttl value which is 128,
// but change the fragmentation behavior.
options.DontFragment = true;
options.Ttl = 128;
// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 500;
int count = -1;
//IPAddress c = first;
int N=200;
IPAddress c = GetIpByPossition(N,first);
for (int i = N; i <255 ; i++)
{
PingReply reply = pingSender.Send(c.ToString(), timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
listBox1.Items.Add("Address: " + reply.Address.ToString());
count++;
//listBox1.Items.Add("RoundTrip time: " + reply);
//listBox1.Items.Add("Time to live: " + reply.Options.Ttl);
//listBox1.Items.Add("Don't fragment: " + reply.Options.DontFragment);
//listBox1.Items.Add("Buffer size: " + reply.Buffer.Length);
}
c=GetNext(c);
}
listBox1.Items.Add(count);
}
private IPAddress GetFirst(IPAddress myIP)
{
String IP = myIP.ToString();
String nIP = IP.Remove(IP.Length-3);
nIP += "1";
return IPAddress.Parse(nIP);
}
private IPAddress GetNext(IPAddress myIP)
{
String IP = myIP.ToString();
String temp=null;
int i=IP.Length-1;
int count = 0;
while ( IP!='.')
{
temp += IP;
i--;
count++;
}
String temp1 = null;
for (int k = 0; k < temp.Length; k++)
{
temp1+=temp[temp.Length - k - 1];
}
int ad = Convert.ToInt32(temp1);
ad++;
if (ad >= 1 && ad <= 254)
{
String nIP = IP.Remove(i+1);
nIP += ad.ToString();
return IPAddress.Parse(nIP);
}
return IPAddress.Parse(temp);
}
private IPAddress GetIpByPossition(int n,IPAddress myIP)
{
String IP = myIP.ToString();
String temp = null;
int i = IP.Length - 1;
int count = 0;
while (IP != '.')
{
//temp += IP;
i--;
count++;
}
//int ad = Convert.ToInt32(temp);
//ad++;
if (n >= 1 && n <= 254)
{
String nIP = IP.Remove(i + 1);
nIP += n.ToString();
return IPAddress.Parse(nIP);
}
return IPAddress.Parse(temp);
}
}
}
определитель IP адресов
дорогие программисти помогите пожалуйста! у меня задача такая! определит сколько компов в локалном сети и их IP адресов. и на на dial-up тоже определит соединенным с моим компом ip адресов. за ранее спосибо
Какая конкретно задача стоит? А то пахнет тухлой архитектурой, либо кул-хацкерством.
основная задача: определить сколько компьютеров в локалном сети, и их айпи адресов.
Может этот код не претендует на оптимальность и быстроту но он рабочий. Думаю идею ты понял.
Извини, но код без комментариев.Работа с классом Ping содрана из MSDN. Ну остальное это получение следующего адреса, адреса по позиции и т.д. Придумаешь лучши пиши - посмотрим.
спосибо freestyler...я попробую потом сообшу результат и мнение
Безошибочного и 100%-верного способа решения данной задачи - нет, увы.
примеры коммерческого качества.
http://www.codeproject.com/cs/internet/host_info_within_network.asp
Там правда если IP существует,но невозможно определить MAC выкидывает MessageBox, это место можно закоментить(чтоб не раздрожало) и будет работать 100%
http://www.codeproject.com/cs/internet/ListNetworkComputers.asp
Здесь еще один пример, возможно немного сложнее (там вроде с импортом функций)
Вобщем если немного разберешься думаю поможет.