Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

LAN Delphi

-czeski- 12 Oct 2005 23:40 1400 4
  • #1
    -czeski-
    Level 10  
    Czy zna ktos jak zrobic zeby napisac program ktory by pobieral adrsy IP oraz MAC kart sieciowych, komputerow sieci LAN. Lub tez czy istnieje jakis program, ktory umozliwia przerobienie .dcu na .pas.

    Dzieki
  • #3
    one_eddie
    Level 25  
    Jesli dobrze sie orientuje jedyna metoda jest skanowanie sieci. Prorgam ktory dziala podobnie (sys. Linux) nazywa sie nmap. Moze zacznij od przestudiowania jego zrodel.

    Bardzo podoba mi sie twoja polszczyzna:

    Quote:
    Czy zna ktos jak zrobic zeby napisac program ktory by pobieral adrsy


    :]
  • #4
    Sam Sung
    Level 32  
    one_eddie wrote:
    Jesli dobrze sie orientuje jedyna metoda jest skanowanie sieci. Prorgam ktory dziala podobnie (sys. Linux) nazywa sie nmap. Moze zacznij od przestudiowania jego zrodel.


    nmap faktycznie służy do skanowania sieci, jednak nie jest to potrzebne do znajomości przypisań IP - MAC we własnej, lokalnej sieci :) - taka wiedza jest konieczna do jakiejkolwiek komunikacji.
    Wiązanie IP-MAC odbywa się przy pomocy protokołu ARP.

    W Windows wystarczy wywołać arp -a , aby zobaczyć wszystkie znane powiązania IP z MAC'ami. Podobne polecenie jest dostępne w Linuksie, a jeśli nie, to tam można podglądnąć plik /proc/net/arp .
  • #5
    one_eddie
    Level 25  
    Faktycznie tak tez mozna.

    Przyklad troche niezdarny ale dziala :-)

    Code:
    #include <cstdlib>
    
    #include <iostream>
    #include <string>
    #include <vector>

    using namespace std;

    int main(int argc, char *argv[])
    {
       // clear
       system( "cls" );
       
       // Open
       FILE* stream = popen( "arp -a", "rt" );
       
       // string vec
       vector< string > vLines;
       
       // Get info
       char buff[80];
       while ( fgets( buff, 80, stream ) )
          vLines.push_back( buff );

       // Del first unused
       vLines.erase( vLines.begin(), vLines.begin() + 3 );
          
       // print addresses
       vector< string >::iterator it = vLines.begin();
       vector< string >::iterator end = vLines.end();
       
       while ( it != end )
       {
          // get line
          string line = *it++;
          
          // split
          char addr[ 16 ], mac[ 18 ], notused[50];
          sscanf( line.c_str(), "  %15s           %17s %s", addr, mac, notused );
          
          // Echo
          printf( "%s - %s\n", addr, mac );
       }
       
       // Close
       pclose( stream );
       
       // Wait for key and exit
        system("PAUSE");
        return EXIT_SUCCESS;
    }