logi sisse meist KKK

Tere,

Mul on masin, ja seal peal C++ programm, mis tahaks saada loetelu oma lokaalsetest IP-dest. Lahendus peaks katma mõned levinud UNIXilaadsed nagu Linux ja Mac OS X ning võiks kompileeruda ka Windowsi all, MinGW keskkonnas. Lisanõue on see, et ei tohiks teha ühendusi teiste masinatega (äärmisel juhul DNS).

Mõtlesin enne iseleiutamist küsida - äkki on mõni ilus vastus? Cõib olla nii C kui C++.

Dan

küsitud Dec 01 '09 at 14:52

Dan%20Bogdanov's gravatar image

Dan Bogdanov
2113

Kas masina pingimine läheb ühenduse loomise alla? Põhimõtteliselt peaks ühendatavate masinate arvu saama teada nii nagu Windows koostab võrku ühendatud arvutite nimekirja. Väike tsükkel üle 192.168.1.x vahemiku leiaks koduvõrgust kõik võimalikud masinad üles.

(Dec 01 '09 at 15:09) Teet

Kas ma sain õigesti aru, et on vaja lokaalses masinas olevate võrguadapterite ip-aadresse? Või on vaja lokaalses võrgus olevate masinate aadresse?

(Dec 02 '09 at 08:16) egon ♦♦

Soov on lokaalse masina adapterite IP-aadresside järele.

(Dec 02 '09 at 18:03) Dan Bogdanov

Praegu hakkan proovima lahendust, mis Win32 all teeb seda codeguru.com sorti koodi ja UNIXite all getifaddrs-põhist lahendust. Vaatame, mis välja tuleb.

(Dec 02 '09 at 18:52) Dan Bogdanov

Linuxi ja BSD all peaks võiks pruukida getifaddrs()

link

vastatud Dec 02 '09 at 00:54

sigamozart's gravatar image

sigamozart
2894

Ka see Muscle teek kasutab *NIX-ide all nimetatud funktsiooni.

(Dec 02 '09 at 18:05) Dan Bogdanov

Kui ma õigesti aru saan, siis tuleks küsida masina nime ja seejärel küsida sellele nimele vastavaid aadresse. Esimese annab funktsioon gethostname() (võib-olla tuleb domeen otsa liita, selle saab getdomainname() funktsiooniga), teise saab gethostbyname() funktsiooniga.

Idee pärineb sellest C# koodist, aga seda toetab ka isiklik kogemus.

link

vastatud Dec 01 '09 at 22:01

Tambet%20Matiisen's gravatar image

Tambet Matiisen ♦♦
6723925

1

Aitäh, lingi eest. Seal on mainitud ka C++ versiooni, mis paraku on Windowsi jaoks tehtud ning alustab rõõmsalt WSA* käskudega. Ma ei ole nii ekspert, et selle koodi portaablust hinnata.

Kellele huvi pakub, siis C++ versioon muidu siin: http://www.codeguru.com/Csharp/Csharp/cs_network/article.php/c6045

(Dec 02 '09 at 18:05) Dan Bogdanov

Muscle library-l on olemas selline funktsioon nagu GetNetworkInterfaceInfos. Tõenäoliselt on võimalik sealt sobiv kood kätte saada.

link

vastatud Dec 01 '09 at 16:00

egon's gravatar image

egon ♦♦
71138

Siin on tõesti Windowsi GetAdaptersAddresses() ja UNIXi getifaddrs() lahendused olemas. Kõik on pakitud teegi ülejäänud infrastŕuktuuri sisse, aga üldiselt saab aru.

(Dec 02 '09 at 18:51) Dan Bogdanov

POCO C++ Libraries on minu lemmik library kui vaja socketeid kasutada, niiet soovitaks seda POCO. Lisan ka kuidas selle abil vajalikud aadressid kätte saada. Töötab minu Maci peal ja ma olen POCO't ka Windowsil MinGW-ga kasutanud. Usun, et ka linuxil ei tohiks probleeme olla.

#include <iostream>
#include <Poco/Net/NetworkInterface.h>
using namespace Poco::Net;
using namespace std;

int main ()
{
    NetworkInterface::NetworkInterfaceList interfaces = NetworkInterface::list();
    for (unsigned i = 0; i < interfaces.size(); ++i)
    {
    	// You probably are interested only in IPv4.
    	if (interfaces[i].address().family() == IPAddress::IPv4)
    	{
    		cout << interfaces[i].address().toString() << endl;
    	}
    }
}
link

vastatud Dec 04 '09 at 23:50

einz's gravatar image

einz
213

Windoze WinSock teegiga saaks kasutada SIO_GET_INTERFACE_LIST käsku, umbes nagu see siin tehtud on.

link

vastatud Dec 04 '09 at 13:20

kt's gravatar image

kt ♦♦
11228

Sinu vastus
toggle preview

Jälgi seda küsimust

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Pinu tööpakkumised

kõik pakkumised »

Sildid:

×3
×3
×2
×1

küsitud: Dec 01 '09 at 14:52

nähtud: 1,178 korda

viimati uuendatud: Dec 04 '09 at 23:50

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee