Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)

[es] :: .NET :: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)

[ Pregleda: 9464 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.co.yu.



Profil

icon Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)14.03.2008. u 18:42 - pre 196 meseci
Kako da izlistam uz pomoc visual basica IP adrese svih racunara koji se nalaze u lokalnoj mrezi?

Ubih se trazeci po Googlu neki primer ali nisam pronasao nista sto radi, tj svi pronalaze samo adresu racunara na kome je startovan program ili ne rade uopste.

Unapred hvala
Hear all, trust nothing!
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-4.sezampro.yu.



+395 Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)14.03.2008. u 20:05 - pre 196 meseci
Citat:

@bobby63 prethodni post
Nasao sam u medjuvremenu knjigu "Network programming.NET with C# and VB.NET " i odatle iskopao neke primere koji mi vrse posao tj upotrebio sam UDP sockets i postigao sam komunikaciju koja izgleda da ce da zadovolji moje potrebe. Ostalo mi je jos da pronadjem kako da izlistam sve IP adrese u lokalnoj mrezi ali cu to da postavim kao pitanje u posebnom threadu.



Da li si probao sa TcpClient i TcpListener ?
Pogledaj System.Net.Dns klasa sa statickim metodama koje ti daju IP sa klijenta .
http://msdn2.microsoft.com/en-...ry/system.net.dns_methods.aspx
Ako interval komunikacije nije ucestao mozda ti i ne treba UDP i multicast jer na svakih minut saljes serveru i iP adresu i statistiku zajedno ..
A ako ti ne uspe najsigurniji i najlaksi nacin je kao sto su rekli mmx i shadowed (web services i .net remoting) primera na netu ima bezbroj ..






Viva lollapalooza
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)14.03.2008. u 23:15 - pre 196 meseci
Slazem se, ne bi trebalo za ovu svrhu da koristis UDP protokol. On jeste najtanji po pitanju overhead-a, ali to ima svoju cenu. UDP ne garantuje da ce primaoc podataka te pakete dobiti po redosledu po kom su poslati, ne garantuje da se neki paketi nece poslati primaocu dva ili vise puta i na kraju krajeva ne garantuje da ce paket uopste stici do primaoca.

Dalje, ne postoji lagan nacin da odredis sve masine na LAN-u, narocito ako ih stite hardverski i sotverski firewall-i. Mozes npr da na osnovu svoje adrese i maske LANA da odredis sve moguce IP adrese u LAN-u i da svakoj posaljes ICMP8 paket (Echo) pa da vidis ko ti se javi nazad, ali nema garancija da ces odgovor dobiti od svih.

Ono sto pretpostavljam tebi treba je detekcija svih masina sa kojima ces ti raditi i na kojima se vrti tvoj software. Za tu svrhu mozes da iskoristih broadcast adresu na IP4 lan-u (zadnja IP adresa u opsegu, npr 192.168.1.255 na 192.168.1.0/24 LANu), svi broadcast paketi stizu na sve registrovane klijente. Kad se tvoja aplikacija pokrene izbaci paket u broadacast i osluskuje povratne informacije a svi klijenti kad prime zahtev odgovore adekvatnim odgovorom i time omoguce novom klijentu da mapira sve postojece po source IP adresi.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.co.yu.



Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)15.03.2008. u 00:16 - pre 196 meseci
Zapravo sam i pronasao kod koji radi ali je neupotrebljiv jer mu treba preko pola sata da se izvrsi, mada daje tacne adrese
Code:

  Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim hostInfo As IPHostEntry = Dns.GetHostByName(Dns.GetHostName())
        Dim address() As IPAddress = hostInfo.AddressList
        Dim m_IP As String = address(0).ToString
        Dim i As Int16 = m_IP.LastIndexOf(".")
        Dim a As String = m_IP.Substring(0, i + 1)
        For i = 100 To 255
            Dim ip As String = a + i.ToString
            Try
                Dim m_HostName As IPHostEntry = System.Net.Dns.GetHostByAddress(ip)
                ListBox1.Items.Add(m_HostName.HostName + "  " + ip.ToString)
            Catch
            End Try
        Next
    End Sub

linija koja ga usporava je
Code:
 Dim m_HostName As IPHostEntry = System.Net.Dns.GetHostByAddress(ip)

ali iskreno ne vidim sta bi tu moglo da se uradi.
Znam za mane UDP-a ali se ovde manje vise non stop salju isti podaci i kontrola koja se ostvaruje preko servera je vrlo blaga tako da i ako se propuste podaci i za nekoliko minuta to nije neki problem mada cu u svakom slucaju da stavim neki heandshake. Sa druge strane kompjuter koji kontrolise masinu ne sme da stucne u glavnom poslu koji obavlja pa sam i zato odabrao UDP iz straha da TCP ne uvede neko stucanje tj zastajkivanje (mozda lupam, nisam nikad radio mrezno programiranje do sada).
Ideja je da preko LANa saljem stringove na kojima cu posle da radim neki parse da bih slao i izvlacio sta mi treba. Racunari koji su u mrezi se povremeno gase i ukljucuju. Iz ovoga razloga mi je isto bitno da svakih par minuta preskeniram mrezu da vidim da li se neka masina odjavila i da li se prijavio neki novi kompjuter.

@mmix
U ovo sa broadcast adresom nisam znao. To bi moglo da bude super resenje.
Evo odma cu da pokusam

[Ovu poruku je menjao bobby63 dana 15.03.2008. u 01:39 GMT+1]
Hear all, trust nothing!
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.co.yu.



Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)15.03.2008. u 00:37 - pre 196 meseci
Radi ovo brate super. Isprobao sam sa dva kompjutera.
Hvala puno.
Videcu sutra da opteretim UDP sa nekoliko racunara koji non stop salju i primaju da vidim do kakvih sr***a dolazi pa ako sve to prolazi sa manje od 5% gresaka onda sam miran a ako ne ide kako treba onda prelazim na TCP.

[Ovu poruku je menjao bobby63 dana 15.03.2008. u 01:49 GMT+1]
Hear all, trust nothing!
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)15.03.2008. u 13:28 - pre 196 meseci
Citat:

Znam za mane UDP-a ali se ovde manje vise non stop salju isti podaci i kontrola koja se ostvaruje preko servera je vrlo blaga tako da i ako se propuste podaci i za nekoliko minuta to nije neki problem mada cu u svakom slucaju da stavim neki heandshake. Sa druge strane kompjuter koji kontrolise masinu ne sme da stucne u glavnom poslu koji obavlja pa sam i zato odabrao UDP iz straha da TCP ne uvede neko stucanje tj zastajkivanje (mozda lupam, nisam nikad radio mrezno programiranje do sada).
Ideja je da preko LANa saljem stringove na kojima cu posle da radim neki parse da bih slao i izvlacio sta mi treba. Racunari koji su u mrezi se povremeno gase i ukljucuju. Iz ovoga razloga mi je isto bitno da svakih par minuta preskeniram mrezu da vidim da li se neka masina odjavila i da li se prijavio neki novi kompjuter.



Ne verujem da ce ti TCP stucati tolko u LAN mrezi (ako sumnjas uvek ti je pri ruci "ping" sa command prompta) .
napravis client program koji se startuje sa windows-om (moze i console-ni program)
i koji pri startu salje serveru svoj IP sa komandom LOGIN npr..
Server vraca status OK i smesta ga u neku listu aktivnih IP adresa i zapisuje u log file.
Client salje posle 1 min. ponovo IP + DATA ,.tvoji podaci .
(mozes pored IP adrese da saljes i neki timestamp da bi server znao kad je poslednji put klijent slao podatke) .
Server vraca OK i eventualno radi azurira neku bazu ili xml text file ....
Na klijentu hvatas sistemsku poruku WM_QUERYENDSESSION (http://msdn2.microsoft.com/en-us/library/aa376890.aspx)
tj. kada se Windows gasi i saljes serveru komandu IP + LOGOUT ..
Server vraca OK i izbacuje ga sa liste aktivnih masina i zapisuje u log file ..






Viva lollapalooza
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)15.03.2008. u 14:11 - pre 196 meseci
A sta se desi kad klijent neocekivano okine, npr nestane mu struja ili sama aplikacija/servis padnu. Po ovom algoritmu, klijent ostaje registrovan na serveru prakticno neograniceno dugo iako je naktivan.

Drugo, vidim da se stalno potencira to slanje lokalne IP adrese u payload-u. Za tim nema potrebe a i moze da napravi darmar. Za pocetak, ne mora uopste da se ukljucuje zato sto se ta informacija vec nalazi u IP frame-u paketa i dostupna je kroz socket kroz koji je paket stigao u aplication layer i moze se izvuci kroz socket API. Drugo, ako u payload ubacis AdressList[0] mozes da "pokvaris" mreznu komunikaciju svoje aplikacije ako je klijent multi-host masina. Kako?

Uzmi npr host sa adresom 192.168.1.100, njegova metrika na mreznoj kartici je recimo 10 (metrika odredjuje prioritet rutiranja ako ista ruta postoji na oba interfejsa). Sad ta masina napravi dial-up konekciju na internet i dobije drugu IP adresu, ovaj put sa metrikom 1. Primarna adresa masine sad postaje IP adresa dialup konekcije. Ti uzmes IP adresu iz AdressList[0], ubacis u payload i posaljes serveru na 192.168.1.1 i ona ga ubaci u listu pod IP adresom iz dialup-a klijenta . U najgorem slucaju ce svi pokusaji server da komunicira sa klijentom propasti, a u najboljoj ce podaci stizati ali tako sto ce se rutirati preko pola drzav od ISP-a servera do dial-up ISP-a klijenta

Sa druge strane kad IP adresu uzimas iz IP frame-a onda je to IP adresa za koju postoji rutiranje (inace paket ne bi ni stigao) i bice 192.168.1.100 bez obzira na ostale hostove na masinama.

Moja preporuka je da koristis "beacon pattern" preko broadcast adrese za network discovery a standardnu TCP komunikaciju za razmenu podataka i komandi izmedju servera i klijenata. Beacon pattern se npr koristi (ali na mnogo nizem transportnom nivoue) u wireless mrezama za detekciju nodova. Ukratko pattern je sledeci:

Postoje dva UDP paketa, nazovimo ih "probe" i "acknowledge" i oba se salju i primaju preko istog porta na broadcast-u.

1. Klijent kad se podigne, pocne da osluskuje za "probe" pakete i onda posalje jedan "acknowledge" samoinicijativno. Posle toga cuti i ceka, i svaki put kad mu stigne "probe" paket, updatuje svoju referencu na server koristeci IP adresu posaljioca i sibne "acknowledge" u broadcast.

2. Server kad se podigne pocne da osluskuje za "acknowledge" pakete i sibne jedan "probe" paket. Posle toga, u odredjenim intervalima (recimo t=1s) posalje novi "probe". Kad dobije "acknowledge" za svaki od njih izvuce IP adresu posaljioca, i doda klijenta u svoju listu sa internim brojacem (recimo missedProbes) postavljenim na 0, ili ako IP adresa vec postoji u listi dekrementira njen missedProbes za jedan. Takodje, server svaki put kad posalje "probe" svim registrovanim klijentima u internoj listi inkrementira missedProbes za jedan i ako je missedProbes veci od recimo 10 (ili koliko hoces da bude), izbaci klijenta iz liste.

Ovaj sistem bukvalno moze da funkcionise neograniceno dugo i da serverska lista klijenata nikad nije vise od t*max(missedProbes) sekundi stara.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)15.03.2008. u 14:56 - pre 196 meseci
Citat:

Drugo, vidim da se stalno potencira to slanje lokalne IP adrese u payload-u. Za tim nema potrebe a i moze da napravi darmar. Za pocetak, ne mora uopste da se ukljucuje zato sto se ta informacija vec nalazi u IP frame-u paketa i dostupna je kroz socket kroz koji je paket stigao u aplication layer i moze se izvuci kroz socket API. Drugo, ako u payload ubacis AdressList[0] mozes da "pokvaris" mreznu komunikaciju svoje aplikacije ako je klijent multi-host masina. Kako?

Slazem se ... mozda sam malko pojednostavio stvari pa sam ispao neprecizan :)

Citat:

@bobby63
Znam za mane UDP-a ali se ovde manje vise non stop salju isti podaci i kontrola koja se ostvaruje preko servera je vrlo blaga tako da i ako se propuste podaci i za nekoliko minuta to nije neki problem mada cu u svakom slucaju da stavim neki heandshake

Navodim IP adresu samo kao podatak koji bi bio prisutan (ne morai ne sme da bude u payload-u)
i na osnovu kojeg bi radio njegov handshaking i kontrolu login-a i logoffa
a UDP moze da zadrzi kao protokol ...kad mu vec radi :)
Citat:

mmix
Moja preporuka je da koristis "beacon pattern" preko broadcast adrese za network discovery a standardnu TCP komunikaciju za razmenu podataka i komandi izmedju servera i klijenata. Beacon pattern se npr koristi (ali na mnogo nizem transportnom nivoue) u wireless mrezama za detekciju nodova

Zanimljivo !!... ajde baci neki link ako imas vise za citanje ...
ja nadjoh za sad ove : http://www.wi-fiplanet.com/tutorials/article.php/1492071 http://www.packetnexus.com/docs/20010419_frequencyHopping.pdf
Pozdrav@@@

Viva lollapalooza
 
Odgovor na temu

bobby63
Nis

Član broj: 11398
Poruke: 180
*.dynamic.sbb.co.yu.



Profil

icon Re: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)16.03.2008. u 20:04 - pre 196 meseci
Hvala svima na iscrpnim odgovorima koji, avaj, uglavnom prevazilaze moje poznavanje te tematike.

Isprobao sam sa 4 racunara UDP, tj na svakom se izvrsavala samo petlja koja salje bezveze podatke, do gubitka dolazi ako se se predje kapacitet mreze (za sta kod mene nema nikakve verovatnoce) a dovoljno je npr da u petlju dodam 1ms pauze da sve funkcionise bez ikakvih gubitaka, zapravo u nekom kracem intervalu izgura i preopterecenje, pretpostavlja da postoji neki buffer koji se bavi time. Na kraju krajeva ako se ukaze potreba zamenicu delove koji rade samo transport sa TCP ali mi je za sada jednostavnije da radim sa UDP.

Trenutno sam napravio komunikaciju ovako i to izgleda za sada da radi bez problema:

1. Server preko broadcast salje prozivku svaki minut, clienti po prijemu, vracaju na IP servera odgovor da su tu i onda server azurira listu IP adresa ukljucenih racunara.
2. Client prati koliko je vremena proslo od zadnje prozike ili primljenog podatka pa ako taj period predje neku vrednost, prozove server pa ako odgovora nema zakljuci da je server iskljucen i prelazi u default mod.
3. Ide non stop povremena obostrana komunikacija gde klijenti raportiraju sta rade a server zahteva da se neki parametar promeni.
4. Na zahtev servera klijenti salju neke trenutne statisticke podatke, ako se neki podatak izgubi uz put proziva se taj klijent da ponovo posalje

Da napomenem da je kontrola klijenata od strane servera nekriticna i svi podaci se visetruko proveravaju tako da neispravan podatak ili nedostatak podatka ne moze da ugrozi proces koji kontrolise klijent. Vise je vazno da se na serveru ima kompletan uvid u to sta se desava na svim klijentima.

Tek kada ovo sve doteram i zavrsim interface na serveru mogu da pokusam sa ostalim oblicima komunikacije, da budem iskren za sada mi to deluje prekomplikovano a imam i deadline da demonstriram neku beta verziju koja radi.
Hear all, trust nothing!
 
Odgovor na temu

[es] :: .NET :: Kako da pronadjem sve IP adrese u LAN mrezi (VB NET)

[ Pregleda: 9464 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.