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

Вниз

Определение mac-адреса   Найти похожие ветки 

 
BioHEX ©   (2009-12-18 10:24) [0]

Такая беда, при
var
str:TStringList;
begin
str:=TStringList.Create;
str.LoadFromFile("mac.txt");
Memo1.Text:=str.Text;
str.Free;
end;

теряется большая часть информации. Вот код при помощи которого производилась запись mak.txt:
program GetMac;

uses
 Windows,
 SysUtils,
 Classes;

const
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;

type
//------IP address structures---------------------------------------------------
PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
IP_ADDRESS_STRING = array[0..15] of char; // IP as string

PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IpAddress: IP_ADDRESS_STRING;
IpMask: IP_ADDRESS_STRING;
Context: DWORD;
end;
//------ADAPTER INFO STRUCTURES-------------------------------------------------
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO;
ComboIndex: DWORD;
AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of char;
Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of char;
AddressLength: UINT;
Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;
Index: DWORD;
aType: UINT;
DHCPEnabled: UINT;
CurrentIPAddress: PIP_ADDR_STRING;
IPAddressList: IP_ADDR_STRING;
GatewayList: IP_ADDR_STRING;
DHCPServer: IP_ADDR_STRING;
HaveWINS: BOOL;
PrimaryWINSServer: IP_ADDR_STRING;
SecondaryWINSServer: IP_ADDR_STRING;
LeaseObtained: LongInt;
LeaseExpires: LongInt;
SpareStuff: array [1..200] of char;
end;

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
pOutBufLen: PULONG): DWORD; stdcall;
external "Iphlpapi.dll" name "GetAdaptersInfo";

const
OutBufLen: ULONG = 2000;
AddrLen = 6;

var
AdapterInfo: IP_ADAPTER_INFO;
Result: DWORD;
i: integer;
Next: PIP_ADAPTER_INFO;
str:TStringList;
mac:String;
begin
str:=TStringList.Create;
Result:= GetAdaptersInfo(@AdapterInfo, @OutBufLen);
if Result = 0 then
begin
Next:= @AdapterInfo;
repeat
str.Add("Description: "+Next^.Description);
for i := 0 to AddrLen do
begin
mac:=mac+IntToHex(Next^.Address[i],2);
if i <> AddrLen then mac:=mac+"-";
end;
str.Add("MAC address: "+mac);
Next:= Next^.Next; // переходим к следующему адаптеру
str.Add("");
until Next = nil;
end
else str.Add("Error. Result code: "+IntToStr(Result));

str.SaveToFile("mac.txt");

str.Free;
end.


 
Vitalts   (2009-12-18 10:36) [1]

Дык посмотри что в текстовик пишеться. После МАК-адреса куча нулей идет, str.Text - есть стринг, и данный символ означет конец стринга, вот и режеться.
Делай не for i := 0 to AddrLen do, а до фиксированного значения. МАК состоит из 6-ти байт. И походу нулевой байт тоже нужно упускать, проконсультируйся с мануалом.


 
BioHEX ©   (2009-12-18 10:41) [2]

Ок, спасибо.


 
BioHEX ©   (2009-12-18 10:44) [3]

const
 AddrLen=6


 
BioHEX ©   (2009-12-18 10:46) [4]

значение и так фиксировано.


 
Vitalts   (2009-12-18 10:51) [5]

Соврал я, ошибка в
repeat
str.Add("Description: "+Next^.Description);

На последнем шаге пишеться пустой Next^.Description

Юзай While


 
Vitalts   (2009-12-18 10:57) [6]

Или проверку на Next = nil перед обращением


 
BioHEX ©   (2009-12-18 11:08) [7]

изменил цикл на

while Next<>nil do
begin
end;


не помогает


 
BioHEX ©   (2009-12-18 11:11) [8]

соответственно проверка на Next = nil перед обращением тоже отпадает


 
BioHEX ©   (2009-12-23 16:58) [9]

Вопрос снят. Полностью переписал код.



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

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

Наверх




Память: 0.46 MB
Время: 0.06 c
2-1337605535
TStas
2012-05-21 17:05
2013.03.22
Плохо ловится WM_DRAWCLIPBOARD ричедитом


15-1352383958
Artem
2012-11-08 18:12
2013.03.22
XP на VirtualBox e запускается со второго раза


2-1330552340
misha
2012-03-01 01:52
2013.03.22
Как спроектировать класс


2-1338190785
jacksotnik
2012-05-28 11:39
2013.03.22
Удалить поле из пользовательского датасета


15-1345037851
Artem
2012-08-15 17:37
2013.03.22
Посоветуйте фоторесайзер любых размеров.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский