IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

[MS-DOS] Lire la Mac-address de la carte réseau [Turbo Pascal]


Sujet :

Turbo Pascal

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2002
    Messages : 55
    Points : 51
    Points
    51
    Par défaut [MS-DOS] Lire la Mac-address de la carte réseau
    Bonjour à tous

    Y a-t-il moyen de lire la Mac address d'une carte réseau avec TP7 ? L'application doit se lancer depuis le Dos. ?

    Merci d'avance. : :

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Tu m'excuseras, mais je ne connais pas la "mac address" d'une carte réseau... Et je dois pas être le seul.

    Quoiqu'il en soit, ta carte doit sûrement être une carte PCI. Elle a donc peut-être une IRQ associée, ou bien un port attribué. Dans ce cas, il te suffit de connaître les données à lui envoyer pour qu'elle te les renvoie en retour.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    Je ne connais pas spécialement la réponse, mais Une adresse Mac d'un ordinateur est une adresse qui ne sert je ne sais pas trop a quoi, mais qui s'obtient entre autre, en faisaint un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbtstat -A [SON IP]
    dans les commandes MS-DOS ...
    Mais, c'est tout ce que je sais !!

    @++ Mathieu
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2002
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Merci à Pascail, effectivement avec nbtstat - A et son IP on obtient bien la Mac adresse, mais malheureusement c'est depuis windows qu'on fait ça. mon but c'est que j'aimerai booter depuis la disquette et en lançan applic, il affiche directement la mac adresse sans que windows démmare.

    Je ne sais pas s'il y a moyen avec TP 7 d'accéder directement la carte réseau pour lire info dessus.
    (Par Ex: 00-b7-d0-48-ad-89) c'est mac adresse d'une carte réseau.

    Si qqu a une solution.

    Merci d'avance.

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    mars 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 107
    Points : 279
    Points
    279
    Par défaut
    Donc, c'est une commande DOS, donc a mon avis, avec ta Disquette Boot, tu devrais pouvoir obtenir ta mac adresse en tappant la fameuse commande Nbtstat, qui ne sert pas qu'a ça ! sous dos !

    Faudrais essayer, je ne suis pas un Expert en programmation Réseau !
    désolé, mais je pense que c'est faisable.

    @++ Mathieu
    Chaque jour, l'homme crée des choses plus grandes, meilleures et sûres, et chaque jour, la nature crée des idiots plus performants. Pour l'instant, je pense que la nature gagne.

  6. #6
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Ca ne me dit toujours pas ce qu'est la "mac adresse"...

    Toujours est-il que tu peut accéder à ta carte réseau en faisant appel à l'int 5Ch. Il faudra founir en entrée un buffer de 64 octets pointé par ES:BX, et préalablement rempli en fonction de ce que l'on veut demander à la carte...

    Bonne chance !

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  7. #7
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    octobre 2002
    Messages
    1 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : octobre 2002
    Messages : 1 211
    Points : 2 273
    Points
    2 273
    Par défaut
    Bonjour

    Pour ce que j'en sais, l'adresse MAC d'un périphérique réseau (adaptateur, imprimante, concentrateur...) est une adresse unique, attribuée en usine (& non modifiable) qui permet d'identifier à coup sûr le périphérique. Autrement dit, il est inconcevable que deux périphériques réseau aient la même adresse MAC.
    Un pilote pour ce périphérique cherchera donc cette adresse & le système d'exploitation lui attribuera ensuite une adresse réseau sur 32 bits (du style 123.456.789.001).

    Les systèmes Microsoft cachent ce genre d'information, puisque l'installation est sensée être automatique. Mais une commande (IPCONFIG, par exemple) permet de l'afficher.
    Avec d'autres systèmes (Linux, en particulier), on voit très bien cette adresse dans les fichiers de configuration. On peut alors attribuer une adresse réseau à chaque adresse MAC (en modifiant, si besoin, ces fichiers).

    Cordialement
    « Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux. »
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

  8. #8
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Ah, ben tout de suite, ça m'éclaire !

    Bon, alors en farfouilant dans la doc que je peux avoir, et en regardant un peu sur le Net les différents trucs qu'on a pu me dire sur le sujet (c'est à dire pas grand chose sachant que je n'ai pas trop cherché), ça m'a donné ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    uses
      Dos; { On utilise l'unité Dos pour l'appel aux interruptions }
     
    const
      nccGetStatus = $33; { Commande pour l'état du réseau }
     
    { Le bloc de contrôle pour les appels NetBIOS }
    type
      TNetBIOSControlBlock = record
        ncbCommand: Byte; { La commande à appeler }
        ncbReturnCode: Byte; { Le code de retour }
        ncbLocalSessionNum: Byte; { Numéro de session }
        ncbDatagramEntry: Byte; { Numéro du nom }
        ncbIOPtr: Pointer; { Pointeur vers le buffer }
        ncbLen: Word; { Longueur du buffer }
        ncbRemoteSystem: array[0..15] of Char; { Nom du réseau }
        ncbNetworkName: array[0..15] of Char; { Notre propre nom }
        ncbReceiveTimeout: Byte; 
        ncbSendTimeout: Byte;
        ncbPostHandler: Pointer; { Callbakc pour appels asynchrones }
        ncbAdapter: Byte; { Numéro du réseau }
        ncbCompletionCode: Byte; { Code de retour en asynchrone }
        ncbReserved: array[0..13] of Byte; { Réservé }
      end;
     
    { La structure pour les noms de réseaux }
    type
      TNetBIOSNameStruct = record
        nmName: array[0..15] of Char; { Nom du réseau }
        nmNum: Byte; { Index du réseau }
        nmStatus: Byte; { Etat du réseau }
      end;
     
    { La structure d'état du réseau }
    type
      TNetBIOSStatus = record
        asId: array[0..5] of Byte; { L'adresse MAC : celle qu'on veut !!! }
        asJumpers: Byte;
        asPost: Byte;
        asMajor: Byte;
        asMinor: Byte;
        asInterval: Word;
        asCrcErr: Word;
        asAlgErr: Word;
        asColErr: Word;
        asAbtErr: Word;
        asTCount: Longint;
        asRCount: Longint;
        asRetran: Word;
        asXResRc: Word;
        asRes0: array[0..7] of Byte;
        asNcbFree: Word;
        asNcbMax: Word;
        asNcbX: Word;
        asRes1: array[0..3] of Byte;
        asSeSpend: Word;
        asMsp: Word;
        asSeSMax: Word;
        asBufSize: Word;
        asNames: Word;
        asNameStructs: array[0..15] of TNetBIOSNameStruct;
      end;
     
    { Donne un octet sous forme hexadécimale }
    function Hex(B: Byte): string;
    const
      HexChars: array[0..15] of Char = '0123456789ABCDEF';
    begin
    Hex := HexChars[B shr 4] + HexChars[B and 15];
    end;
     
    var
      Control: TNetBIOSControlBlock; { Le bloc de contrôle NetBIOS }
      Status: TNetBIOSStatus; { L'état du réseau }
      Regs: Registers; { Les registres pour l'interruption }
     
     
    begin
    Regs.ah := 0;
    Intr($2A, Regs); { On vérifie que le réseau est accessible }
    if Regs.ah <> 0 then &#123; Si oui, alors... &#125;
      begin
      FillChar&#40;Control, SizeOf&#40;TNetBIOSControlBlock&#41;, 0&#41;; &#123; On nettoie... &#125;
      with Control do
        begin
        ncbCommand &#58;= nccGetStatus; &#123; On récupère l'état du réseau &#125;
        ncbIOPtr &#58;= @Status; &#123; On pointe vers notre buffer à remplir &#125;
        ncbLen &#58;= SizeOf&#40;TNetBIOSStatus&#41;; &#123; Et on indique sa taille &#125;
        &#123; On remplit le nom du réseau à appeler avec des espaces &#125;
        FillChar&#40;ncbRemoteSystem, SizeOf&#40;ncbRemoteSystem&#41;, 32&#41;;
        ncbRemoteSystem&#91;0&#93; &#58;= '*'; &#123; Mais on place une étoile &#40;important !&#41; &#125;
        end;
      Regs.es &#58;= Seg&#40;Control&#41;; &#123; On donne l'adresse de notre bloc &#125;
      Regs.bx &#58;= Ofs&#40;Control&#41;;
      Intr&#40;$5C, Regs&#41;; &#123; Et on appelle l'interruption NetBIOS &#125;
      if Control.ncbReturnCode <> 0 then &#123; Erreur ? &#125;
        WriteLn&#40;'Erreur lors de l''appel NetBIOS &#58; ', Control.ncbReturnCode&#41;
      else &#123; Sinon, on affiche l'adresse MAC &#125;
        with Status do
          WriteLn&#40;'Adresse MAC &#58; ', Hex&#40;asId&#91;0&#93;&#41;, '-',
                                    Hex&#40;asId&#91;1&#93;&#41;, '-',
                                    Hex&#40;asId&#91;2&#93;&#41;, '-',
                                    Hex&#40;asId&#91;3&#93;&#41;, '-',
                                    Hex&#40;asId&#91;4&#93;&#41;, '-',
                                    Hex&#40;asId&#91;5&#93;&#41;&#41;;
      end
    &#123; Pas de réseau disponible... C'est gênant &#125;
    else WriteLn&#40;'Réseau et support NetBIOS non présents'&#41;;
    ReadLn;
    end.
    Bon, je t'ai fait ça à l'arrache, mais au moins... ça a l'air de fonctionner ! Tout du moins avec mon pauvre modem et l'adaptateur PPP.

    Y'a pas de copyright, sachant que ça a été fait par bibi. Un merci me suffira !

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2002
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    En tout cas, merci à tous et un grand merci à Hdd 34 qui a fourni le code. ce code fonctionne à merveille sous dos de Windows, mais pas sous la disquette dos de boot. Ce que je cherche, c'est de lire la mac adresse de la carte Réseau en bootant seulement avec la disquette dos 6.22 ou sous disquette de boot win9x. sans besoin que windows démmare. Je ne sais pas si c'est réalisable ou pas.

    Si vous avez une solution. : :

    Mille merci.

  10. #10
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Ah teins ? Il ne fonctionne pas sous Dos pur... C'est étonnant ça. Pourtant, je n'utilise aucune ressource Windows.

    Nénamoins, il me semble nécessaire de charger en mémoire les pilotes de ta carte réseau si tu veux y accéder. Car ce code s'appuie sur l'int 5Ch, qui doit être mise en place par un driver quelconque. Lorsque Windows est chargé, c'est lui qui charge tout seul le driver. Mais sous Dos, il faut le faire...

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2002
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    En fait, le prg ne détecte pas de
    'Réseau et support NetBIOS non présents' quand je lance le boot depuis la disquette et pourtant le pilote pour la carte réseau est bien chargé.
    sur le même PC, si win9x démarre et je démmarre le prg cela fonctionne bien. En tout cas mille merci et si vous avez trouvé de solution de problème je suis preneur, de mon côté je vais essayer de voir un peu avec le mode pas à pas pour comprendre le phénomène.

    A+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2002
    Messages : 55
    Points : 51
    Points
    51
    Par défaut
    Avec intr($2A,Regs)au départ, il essai de vérifier quoi,
    Regs.ah := 0;
    Intr($2A, Regs);
    Car avec le driver de la carte chargé ou pas, la valeur de Regs.ah est toujours égale à zéro.

    Mis à part avec le protocol NetBios, il n'y a pas moyen de faire pour lire directement le registre de la carte Réseau, car je suppose que ce Mac adresse doit être inscrit dans les registres de la carte.

    A+

  13. #13
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    L'int 2Ah fonction 0 vérifie la présence d'une compatibilité NetBIOS, donc du support de l'int 5Ch.

    Tu peux toujours essayer sans, ça marchera peut-être.

    Sinon, en effet, l'adresse Mac doit être inscrite directement sur la carte. Seulement le problème est la manière d'y accéder va changer d'une carte réseau à une autre. En passant par le driver, on est sûr d'être compatible avec toutes les cartes réseaux.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mai 2002
    Messages : 55
    Points : 51
    Points
    51
    Par défaut [résolu]
    j'ai enlevé l'instruction de vérification de compatibilité de Netbios et ça fonctionne comme je souhaite.

    En tout cas Mille merci

  15. #15
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Ben de rien ! C'était fait pour ça !

    Et pour la vérification NetBIOS, c'est que ça doit pas être ça !

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire la MAC-ADDRESS dans un fichier
    Par ariuss dans le forum C++
    Réponses: 5
    Dernier message: 11/10/2009, 22h44
  2. MAC-Address en C
    Par ariuss dans le forum Réseau
    Réponses: 3
    Dernier message: 07/10/2009, 21h16
  3. Recuperer le MAC addresse d'un carte reseau
    Par aliwassem dans le forum Delphi
    Réponses: 8
    Dernier message: 04/04/2007, 16h54
  4. Mac Adresse de la carte réseau
    Par pitounette dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2006, 18h01
  5. Mac addresse d'un poste Linux depuis commande Dos
    Par Guitch dans le forum Développement
    Réponses: 1
    Dernier message: 25/10/2005, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo