Toon posts:

[C++] Mac Adress ophalen in dos

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik had even een vraagje.

Wij moeten voor school een programma bouwen die een unieke code genereert op elke pc. We werken hier op school dus met reborn kaartjes dus het is niet in het programma te verwerken om op elke pc een apart pc nummer aan te geven. Nu hadden we dus het idee om de pc uniek te maken via het mac adress.

We willen dus voor het opstarten van de pc (windows 98) een dos based C++
util maken die dus het mac adres afvangt en hiermee een reken sommetje maakt
waaruit een uniek nummertje komt. Nou hebben wij dus weinig ervaring met C++
en kennen enkel de basis.

Dus zou iemand ons kunnen helpen met het afvangen met het mac adress, is dit mogelijk? en hoe doe ik dit?


Alvast bedankt,

OJ

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een dos applicatie of een console applicatie?

Voor win32 kun je winsock gebruiken, voor dos zul je een ipx library moeten gebruiken (zoek dan eens naar ralf brown's interrupt list)

.edit: oh wacht, ik las verkeerd. Dus voor het opstarten van windows. Als je unieke id's wilt hebben dan kun je sowieso beter naar UUID/GUID (universal unique identifier) generatie oid kijken, hoef je ook niet zo moeilijk te doen met allerlei hardware

[ Voor 42% gewijzigd door .oisyn op 12-11-2003 22:30 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
Als je een packet driver kan vinden van die kaart kan je via de packet driver het mac adres opvragen.
Deze drivers hangen meestal aan int 0x60 maar kan van 0x60 t/m 0x80 ingesteld worden.
In de interrupt lijst van Ralf Brown is makkelijk terug te vinden hoe je dan het mac adres via die driver moet opvragen.
Wel zou ik netjes die packet driver weer unloaden voordat windows opstart, anders gaat het misschien niet helemaal goed allemaal.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • Count
  • Registratie: Augustus 2000
  • Laatst online: 10-08-2023
Simpelere oplossing:

code:
1
2
srand(time());
uniekeID = rand();

Great minds think in parallel gutters.


  • BLACK SPIDER NL
  • Registratie: Januari 2003
  • Laatst online: 22-07 17:16
Count schreef op 13 november 2003 @ 02:33:
Simpelere oplossing:

code:
1
2
srand(time());
uniekeID = rand();
HAHAHAHA, dat is idd wel heel simpel, maar wel effectief

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Count schreef op 13 november 2003 @ 02:33:
Simpelere oplossing:

code:
1
2
srand(time());
uniekeID = rand();
uhm ja, doe dan gewon uniekeID = time (), da's natuurlijk hetzelfde
Met als gevolg dat er best kans in zit dat 2 computers dezelfde ID krijgen als hun RTC gelijk staat op het moment dat het proggie wordt uitgevoerd

Zijn het pentiums? Dan zou je van de rdtsc instructie gebruik kunnen maken (die retourneert het aantal uitgevoerde instructies sinds de cpu runt)

C++:
1
2
3
4
5
6
7
8
long long __declspec (naked) getTSC ()
{
    asm
    {
        rdtsc
        ret
    }
}


oid

[ Voor 26% gewijzigd door .oisyn op 13-11-2003 02:55 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

.oisyn schreef op 12 november 2003 @ 22:20:
Een dos applicatie of een console applicatie?

Voor win32 kun je winsock gebruiken, voor dos zul je een ipx library moeten gebruiken (zoek dan eens naar ralf brown's interrupt list)

.edit: oh wacht, ik las verkeerd. Dus voor het opstarten van windows. Als je unieke id's wilt hebben dan kun je sowieso beter naar UUID/GUID (universal unique identifier) generatie oid kijken, hoef je ook niet zo moeilijk te doen met allerlei hardware
en als je dan nog het MAC adres wil hebben.. de laatste 6(oid) bytes van een GUID zijn waarschijnlijk je MAC

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:47
Is het misschien handiger om het serial id van je HD te nemen. Niet iedere PC heeft een Nic. Het aantal pc's zonder HD is waarschijnlijk kleiner

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

Met de DM&P Sockets Library (http://www.dmp.com.tw/tech/dsock/lib.htm) kun je met dezr functie:

code:
1
BYTE *DSock_GetMacAddr()


het macadres opvragen :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 13 november 2003 @ 07:47:

en als je dan nog het MAC adres wil hebben.. de laatste 6(oid) bytes van een GUID zijn waarschijnlijk je MAC
:?
Weet je uberhaupt wat GUIDs inhouden? Je MAC adres heeft daar weinig mee te maken

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Globally Unique IDs , DEC-style worden toch echt uit je Ethernet MAC adres gegenereerd. Nou zijn er meer stijlen (niet alle computers hebben ethernet) , maar de DEC-style/Microsoft pre-XP style is wel de meest gangbare

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja, natuurlijk kun je het daaruit genereren, maar dat verbindt GUIDs niet aan MACs imho. Je kunt elk stukje hardware gebruiken dat een uniek id nummer heeft. En windows draaide nog niet, weetjenog, dat was het hele probleem :)

.edit: bah, ik had een tijdje terug een heel mooi document over UUID/GUID generatie, maar kan het niet meer vinden 8)7

[ Voor 22% gewijzigd door .oisyn op 13-11-2003 15:09 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
Je kunt elk stukje hardware gebruiken, wat een unique id heeft, als je ook een unieke type prefix hebt van hooguit (128 -lengte van unique id) bits. Voor MAC addressen is er zo'n prefix, met daarin nog wat ruimte voor een tijdsveld. Zonder zo'n prefix loop je een (theoretische) kans op een collision.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

.oisyn schreef op 13 november 2003 @ 13:08:
[...]


:?
Weet je uberhaupt wat GUIDs inhouden? Je MAC adres heeft daar weinig mee te maken
hmmzzz... beetje gefrustreerd, denk je echt dat ik dat van dat MAC adres uit de GUID halen zelf verzonnen heb ofzo ?
Borland (method 2)
VBForum
en nog een link

Je laat in je 2e post merken dat je zelf de verbinding tussen MAC en GUID "even vergeten was" :
.oisyn schreef op 13 november 2003 @ 14:57:
Ja, natuurlijk kun je het daaruit genereren, maar dat verbindt GUIDs niet aan MACs imho. Je kunt elk stukje hardware gebruiken dat een uniek id nummer heeft. En windows draaide nog niet, weetjenog, dat was het hele probleem :)

.edit: bah, ik had een tijdje terug een heel mooi document over UUID/GUID generatie, maar kan het niet meer vinden 8)7
Weet wel wie je beledigd de volgende keer
nofi :O

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Sorry, ik kwam idd misschien wat gefrustreerd over als ik mijn post nog eens nalees. Dat was niet mijn bedoeling, hiervoor mijn excuses. Maar jouw tenen zijn vrij kort, zo te zien. Sorry hoor, als ik je beledigd had. Maar je kunt ook overdrijven natuurlijk

Wat ik bedoel was, ook al kan een GUID uit een MAC adres worden gehaald, dan wil dat nog niet zeggen dat de laatste 6 bytes van een GUID per definitie de MAC adres van je netwerkkaart is. Ik had het over GUID generatie methodes op het moment dat het OS nog niet was opgestart (dat was tenslotte de bedoeling), zodat je niet helemaal het MAC adres hoeft op te vragen van je netwerkkaart (waarvan de drivers nog niet geladen zijn). Het is dan een beetje raar om te zeggen dat als je zo'n gegenereerde GUID hebt, dat dat MAC adres daar dan ineens in zou staan. Als je daar bij de GUID generatie in de eerste plaats al bij kon, dan was die hele GUID generatie natuurlijk niet nodig geweest, denk je ook niet? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Als je een unieke code wilt maken op elke PC zul je toch communicatie via het netwerk moeten hebben om na te gaan dat geen twee PC's dezelfde code hebben, of je moet ervan uitgaan dat iets anders in de PC een uniek nummer heeft (zoals netwerk kaarten, en ik geloof dat ze het ook in CPU's willen inbouwen). In elk ander geval kan je wel een nummer maken met een zeer kleine kans (dus niet nul) dat een ander PC hetzelfde nummer heeft.

Edit: netwerken in DOS is niet makkelijk.

[ Voor 7% gewijzigd door Verwijderd op 14-11-2003 01:13 ]

Pagina: 1