|
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 |
|
Linuxi ja BSD all peaks võiks pruukida getifaddrs() 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. 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. 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.
|

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.
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?
Soov on lokaalse masina adapterite IP-aadresside järele.
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.