Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

как узнать mac   Найти похожие ветки 

 
vs_flash   (2003-11-01 12:53) [0]

Люди подскажите функцию для определения mac адреса удалённой тачки.


 
Verg   (2003-11-01 12:56) [1]

SendArp (C) http://msdn.microsoft.com/library

SendARP

The SendARP function sends an ARP request to obtain the physical address that corresponds to the specified destination IP address.

DWORD SendARP(
IPAddr DestIP,
IPAddr SrcIP,
PULONG pMacAddr,
PULONG PhyAddrLen
);


И т.д. и т.п.


 
vs_flash   (2003-11-01 13:44) [2]

Это по буржуйски, там на сях, а по русски???


 
Verg   (2003-11-01 13:52) [3]


> vs_flash (01.11.03 13:44) [2]
> Это по буржуйски, там на сях, а по русски???


ДСЛОВО ПослатьУАП(
IPАдр НазнIP,
IPАдр ОтпрIP,
УБДЛИН уMACАдр,
УБДЛИН ДлинФизАдр);


> как узнать mac


Не могли бы по-русски про mac?
Чего узнать? Какой-такой mac-шмак?


 
Rouse_   (2003-11-02 17:44) [4]

Вот Вам выдержка из готовящейся статьи (уже какой месяц не могу завершить ее :(

// Из всех приведенных функций эта самая интересная.
// Я много раз говорил о незаслуженном невнимании программистов
// к IPHLPAPI.DLL. Данный пример подтверждает это. На всех форумах
// можно услышать о получании МАС адреса посредством посылки IPX пакета
// и разбора заголовка ответа от удаленного компьютера
// (что само по себе геморой, если не принимать во внимание,
// что IPX уже практически вымер, и его мало где встретишь).
// Здесь же строится полная ARP таблица, на основании которой мы
// можем спокойно произвести выборку по нужному IP адресу,
// а так как все берется из кэша, то мы сможем узнать МАС адреса
// даже выключенных компьютеров...
// Единственный минус: в таблице (не всегда) отсутсвует информация
// по локальному компьютеру, т.е. таким образом можно получить
// все МАС адреса за исключением своего,
// но для этого есть уже другие функции...

// Приведу выдержку из MSDN:
// You can use IP Helper to perform Address Resolution Protocol (ARP) operations for the local computer.
// Use the following functions to retrieve and modify the ARP table.
// The GetIpNetTable retrieves the ARP table.
// The ARP table contains the mapping of IP addresses to physical addresses.
// Physical addresses are sometimes referred to as Media Access Controller (MAC) addresses.

// Хочу заметить что для NT есть очень интересная функция SendARP - позволяющая
// напрямую получить требуемый МАС без построения таблицы, поэтому советую
// модифицировать код программы для более эффективного исполнения участков кода
// под различными системами.

function TMainForm.GetMacFromIP(const IP: String): String;

// (Будем использовать функцию приведения из статьи)
// В качестве первого значения массив, второе значение,
// размер данных в массиве
function GetMAC(Value: TMacAddress; Length: DWORD): String;
var
I: Integer;
begin
if Length = 0 then Result := "00-00-00-00-00-00" else
begin
Result := "";
for i:= 0 to Length -2 do
Result := Result + IntToHex(Value[i], 2) + "-";
Result := Result + IntToHex(Value[Length-1], 2);
end;
end;

// Получаем IP адрес, заметь в отличии от работы с классом WC_IPADDRESS
// здесь преобразование идет в обратном порядке!
function GetDottedIPFromInAddr(const InAddr: Integer): String;
begin
Result := "";
Result := IntToStr(FOURTH_IPADDRESS(InAddr));
Result := Result + "." + IntToStr(THIRD_IPADDRESS(InAddr));
Result := Result + "." + IntToStr(SECOND_IPADDRESS(InAddr));
Result := Result + "." + IntToStr(FIRST_IPADDRESS(InAddr));
end;

// Основная функция
var
Table: TMibIPNetTable;
Size: Integer;
CatchIP: String;
Err, I: Integer;
begin
Result := RES_UNKNOWN;
Size := SizeOf(Table); // Ну тут все просто...
Err := GetIpNetTable(@Table, @Size, False); // Выполняем...
if Err <> NO_ERROR then // Проверка на ошибку...
begin
MessageDlg(ERR_MAC, mtError, [mbOK], 0);
Exit;
end;
// Теперь мы имеем таблицу из IP адресов и соответсвующих им MAC адресов
for I := 0 to Table.dwNumEntries - 1 do // Ищем нужный IP ...
begin
CatchIP := GetDottedIPFromInAddr(Table.Table[I].dwAddr);
if CatchIP = IP then // И выводим его МАС ...
begin
Result := GetMAC(Table.Table[I].bPhysAddr, Table.Table[I].dwPhysAddrLen);
Break;
end;
end;
end;


Желаю успехов


 
Rouse_   (2003-11-02 17:57) [5]

Да, необходимые заголовки:

RES_COM_NO = "Absent";
{$ENDIF}

WSA_TYPE = $101; //$202;

// Для работы с ARP (Address Resolution Protocol) таблицей
IPHLPAPI = "IPHLPAPI.DLL";
MAX_ADAPTER_ADDRESS_LENGTH = 7;

type

// Следующие три типа используются для работы с Iphlpapi.dll
// Выдрал из Iphlpapi.h

// Так будет выглядеть МАС
TMacAddress = array[0..MAX_ADAPTER_ADDRESS_LENGTH] of byte;

// Это структура для единичного запроса
TMibIPNetRow = packed record
dwIndex : DWORD;
dwPhysAddrLen : DWORD;
bPhysAddr : TMACAddress; // Вот здесь и лежит МАС!!!
dwAddr : DWORD;
dwType : DWORD;
end;

// Как и в статье не будем выделять память динамически,
// а сразу создадим массив... (хотя, чесно говоря, это не правильно,
// но я иду простым путем :)
TMibIPNetRowArray = array [0..512] of TMibIPNetRow;

// А это, как и во всей библиотеке, такая вот...
// запрашиваемая структура
PTMibIPNetTable = ^TMibIPNetTable;
TMibIPNetTable = packed record
dwNumEntries : DWORD;
Table: TMibIPNetRowArray;
end;

TMainForm = class(TForm)
gbIP: TGroupBox;
gbInfo: TGroupBox;
memInfo: TMemo;
btnGetInfo: TButton;
procedure btnGetInfoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
IP, Font: Integer; // Это переменные для работы с
edIP: HWND; // WC_IPADDRESS классом
function GetNameFromIP(const IP: String): String;
function GetGroup(const CompName: String): String;
function GetComment(CompName: String): String;
function GetProvider(const CompName: String): String;
function GetMacFromIP(const IP: String): String;
procedure GetShares(const CompName: String);
end;

// Объявим функции, так как их объявлений нет в Дельфи.
// Здесь идет статическая загрузка библиотек, только потому,
// что данные функции есть во всех системах, начиная с W95...

{$EXTERNALSYM WNetGetResourceInformation}
function WNetGetResourceInformation(lpNetResource: PNetResource;
lpBuffer: Pointer; var lpcbBuffer: DWORD; lplpSystem: Pointer): DWORD; stdcall;
{$EXTERNALSYM GetIpNetTable}
function GetIpNetTable(pIpNetTable: PTMibIPNetTable;
pdwSize: PULONG; bOrder: Boolean): DWORD; stdcall;

function WNetGetResourceInformation; external mpr name "WNetGetResourceInformationA";
function GetIpNetTable; external IPHLPAPI name "GetIpNetTable";


Желаю успехов


 
Deadcat   (2003-11-18 05:16) [6]

ARP"ы пашут только в до ближайшего маршрутизатора. А если сеть многоранговая? И NetBIOS у всех вырублен? Чё делать-то?


 
Rouse_   (2003-11-18 12:49) [7]

Автор об этом ничего не сообщает, поэтому логично предположить что у него стандартная одноранговая домашняя локалка...
Хотя я могу быть и не прав...

Желаю успехов


 
Yaro   (2003-12-23 02:38) [8]

Ребята, где надыбать заголовки для IPHLPAPI.dll? Хотя бы сишные, сам переведу. Если у кого-то есть - замыльте мне, пожалуйста.
А если у кого-то есть делфийские, так это ваще супер.
Спасибо.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
1-93966
Aleksandr
2004-02-17 14:33
2004.02.29
Скажите, а есть компоненты для показа Флэш-баннеров?


11-93827
=Sniper=
2003-06-14 19:54
2004.02.29
Copyto(from)Clipboard есть ли в КОЛ что-то похожее??


1-93878
donkey
2004-02-16 12:15
2004.02.29
Поиск по файлу


1-93851
Budy
2004-02-16 14:25
2004.02.29
Реестр


1-93931
Артем К.
2004-02-15 06:28
2004.02.29
как узнать имя формы, на которую помещен компонент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский