Hozzászólások
Hello Mindenkinek!
Tudja-e valaki, hogyan kalkulálható ki a Subnet mask értéke? Egy C programba szeretnék olyan funkciót írni, ami ezt bármilyen adott IP-hez megteszi.
Elõre is köszönöm!
Tom
- A hozzászóláshoz be kell jelentkezni
Nagyon egyszerű, mindazok a bitek 0-ák, amik élők a subnetedben, mindazok 1-ek, amik nem. :-)
Zsiráf
U.i.: Szerintem, a subnet-mask nem az IP címtől függ (izé nem teljesen egyértelműen :-)) így hmm.....
U.i.2: Különben, nem kéne külön megadni, mindig számolnák :-)
- A hozzászóláshoz be kell jelentkezni
Ok köszi!
Sajnos én nem vagyok otthon ebbena témában, csak egy DSL konfiguráló progi miatt kellene ezeket tudnom.
Szóval bocs ha hülye kérdéseket teszek fel de, hátha tudsz segíteni: -:)
A broadcast cím megadása nem kötelezõ. Ha mégis meg akarom adni, azt mi alapján kalkuláhatnám ki?
A network-öt az IP-bõl megállapíthatom ugye? Pl: 192.168.1.1 esetén 192.168.1.0 lesz. Igaz ez?
3. Én jelenleg az if_nameindex és hostent struktúrákat használom, az ethernet kártyák infoinak kiderítésére. Helyesebben ebben az irányban indultam el, mert ez még távolról sem elég. Így csak eth0 ip címét tudom meg, valamint az összes konfigurált ethernet kártya id-jét.
Van esetleg valamilyen standard módszer C-ben amivel kideríthetném az összes adatot?
Pl: Gyártó neve,kiosztott IP, broadcast, mask, network.
Tudom, hogy ezeket pl PCI id alapján összeszedhetem a /proc fájlrendszer megfelelõ elemeibõl, de jobb volna valami standard módszer semmitõl sem függ.
Kérem ha valakinek van bármilyen használható tippje, írjon!
Köszönöm a segítséget elõre is!
Tom
- A hozzászóláshoz be kell jelentkezni
IPv4 nel a halozati cim egy 32 bites int, ezt abrazoljak 4x8bites szamkent (192.168.1.13), ugye minden ertek 0-255 kozott lehet.
Egy IP cim egyszerre ket dolgot is jelent, az egyik a halozati cim (network address) a masik az allomas azonosito (host identifier), a kettot a netmask alapjan lehet szejjelbontani, a netmask szinten egy 32 bites int aminek a felso valahany bitje 1 a maradek 0 pl 255.255.255.0, mivel manapsag minden netmask 1 esekkel kezdodik, es 0kkal vegzodik, ezert szokas megadni netmaskot az egyesek szamaval is, pl a fenti netmaskot hivjak 24-nek is, ami az 1-esek szamat jelenti.
Az halozatoi cimet ugy kapod, hogy a cimet ossze AND-ezed a maskkal, amit kaptal az a halozati cim. A fenti peldaban 192.168.1.0.
Na most jon a rossz hir: sehogyan sem tudod eldonteni egy ipcimrol, hogy mekkora a netmaskja pusztan a cimet ismerve, sot igy nem tudhatod biztosan az alhalozati cimet sem. A broadcast cim altalaban a host identifier 1 esekre allitva, azaz a legmagasabb ertek, de nem kotelezoen, a halozatot konfiguralhatjak ugy is, hogy a 192.168.1.1 legyen a broadcast cim, a lenyeg hogy mindenki az adott halozaton azt hasznalja broadcastnak.
Amit irtal, hogy a 192.168.1.xx nek a maskja 24 az nem biztos, altalaban az, mert ez egy foglalt belso halozati cim, de nem feltetlenul kell hogy 24 legyen, lehet pl 20 is, hogy tobb gep ferjen el az alhalozaton, ne csak 25x.
Na remelem segitett :)
- A hozzászóláshoz be kell jelentkezni
Köszi a választ. Ezek szerint ez valamivel bonyolultabb mint ahogy gondoltam... -:)
Ezek szerint nincs standard funkció a hw adatok beolvasására. Ezek szerint az lspci vagy az ifconfig is a /proc-ból veszi, oda meg kernel generál adatokat. Mindenesetre utánanézek még.
Még egy ucsó kérdés: a /proc és részei standard-nek számítanak minden disztribúció alatt (beleértve a BSD-t, Unix-ot stb)? Mindeképp írni kell valami álatlános módszert, de egy-két adatot így innen is olvashatnék.
Köszönöm a segítséget mégegyszer!
Tom
- A hozzászóláshoz be kell jelentkezni
[quote:0d7d5cb9b5="Tomuser"]
Még egy ucsó kérdés: a /proc és részei standard-nek számítanak minden disztribúció alatt (beleértve a BSD-t, Unix-ot stb)?
Tom
A Linux disztribuciokban is fugghet a disztro altal futtatott kerneltol. Itt meg nagy esellyel azonos. De BSD, Solaris, vagy mas UNIX vagy UNIX-szeru rendszerek alatt biztos h nem. Erre nem erdemes alapozni, vagy pedig ugy kell megirni, hogy tobb rendszerre is fel legyen keszitve.
- A hozzászóláshoz be kell jelentkezni
Olyannyira, hogy OpenBSD alatt nincs is /proc. A sysctl dolgai nem jok ilyesmire?
- A hozzászóláshoz be kell jelentkezni