ايران ويج

نسخه‌ی کامل: تغییر دادن مک آدرس کارت شبکه!
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام خدمت دوستان عزیز.
می خواستم بدونم چه شکلی می تونم با دلفی مک آدرس کارت شبکه وایرلس را تغییر بدم؟؟؟؟؟

با تشکر.
(۱۲-اسفند-۱۳۹۱, ۱۹:۳۱:۰۳)The.Ghost نوشته است: [ -> ]با سلام خدمت دوستان عزیز.
می خواستم بدونم چه شکلی می تونم با دلفی مک آدرس کارت شبکه وایرلس را تغییر بدم؟؟؟؟؟

با تشکر.
مگه میشه آدرس مک رو تغییر داد؟Amaze
نمی شه ها!Whistle
آره مک آدرس رو نمیشه تغییر داد.
حالا چرا میخوای این کارو بکنی؟
@بهزاد و حسین:
نه دوستان! تغبیر مک به صورت دائمی نمیشه!
ایشون میخوان موقتی تغیر بدن که تمام بسته‌ با اون مک فرستاده بشن
(این قابلیت هم مودمون است اگه دقت کنید)
با اجازه همه دوستان این کار امکان پذیر هست نرم افزار هاش موجود هست می تونید دانلود کنید.
به نظر من مهم ترین چیز حتی از آی پی مخفی کردن و یا عوض کردن مک آدرس کارت شبکه هست، این به نظر من مهم تر تا مخفی کردن آی پی.
حالا من نیاز دارم که خودم این آدرس با دلفی عوض کنم نه با برنامه دیگه.
اینم چند تا کد هست که فقط به شما لیست تمام آدرس های مک شبکه را میده.
کد:
program Project1;

{$APPTYPE CONSOLE}


uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

function VarToStrNil(Value:Variant):string;  //Dummy function to onvert an variant value to string
begin
   if VarIsNull(Value) then
    Result:=''
   else
    Result:=VarToStr(Value);
end;


Procedure GetMacAddress;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
  wmiHost, root, wmiClass: string;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;//for access to a bind context
    Moniker: IMoniker;//Enables you to use a moniker object
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));//Converts a string into a moniker that identifies the object named by the string
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));//Binds to the specified object
  end;

begin
  wmiHost       := '.';
  root          := 'root\CIMV2';
  wmiClass      := 'Win32_NetworkAdapterConfiguration';
  objWMIService := GetWMIObject(Format('winmgmts:\\%s\%s',[wmiHost,root]));
  colItems      := objWMIService.ExecQuery(Format('SELECT * FROM %s',[wmiClass]),'WQL',0);
  oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
  while oEnum.Next(1, colItem, iValue) = 0 do
  //if VarToStrNil(colItem.MACAddress)<>'' then //uncomment if you only want list the interfaces with mac adress
  //if colItem.IPEnabled then  // uncomment if you only want list the active interfaces
  begin
    WriteLn('Card Description '+VarToStrNil(colItem.Caption));
    WriteLn('MACAddress       '+VarToStrNil(colItem.MACAddress));
  end;
end;

begin
try
    CoInitialize(nil);
    try
      GetMacAddress;
      Readln;
    finally
    CoUninitialize;
    end;
except
    on E:Exception do
    Begin
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;

  end.

کد:
function MacAddress: string;
var
Lib: Cardinal;
Func: function(GUID: PGUID): Longint; stdcall;
GUID1, GUID2: TGUID;
begin
Result := '';
Lib := LoadLibrary('rpcrt4.dll');
if Lib <> 0 then
begin
   @Func := GetProcAddress(Lib, 'UuidCreateSequential');
   if Assigned(Func) then
   begin
     if (Func(@GUID1) = 0) and
        (Func(@GUID2) = 0) and
        (GUID1.D4[2] = GUID2.D4[2]) and
        (GUID1.D4[3] = GUID2.D4[3]) and
        (GUID1.D4[4] = GUID2.D4[4]) and
        (GUID1.D4[5] = GUID2.D4[5]) and
        (GUID1.D4[6] = GUID2.D4[6]) and
        (GUID1.D4[7] = GUID2.D4[7]) then
     begin
       Result :=
         IntToHex(GUID1.D4[2], 2) + '-' +
         IntToHex(GUID1.D4[3], 2) + '-' +
         IntToHex(GUID1.D4[4], 2) + '-' +
         IntToHex(GUID1.D4[5], 2) + '-' +
         IntToHex(GUID1.D4[6], 2) + '-' +
         IntToHex(GUID1.D4[7], 2);
     end;
   end;
end;
end;

کد:
function GetMacAddress: string;
type
  // This type is defined in MSDN sample code, but tests have found this is
  // not needed (on XP Pro) and Adapter can be of type TAdapterStatus. This
  // method use the type in case other OSs require it
  TAStat = packed record
    Adapt: Nb30.TAdapterStatus;
    NameBuff: array[0..29] of Nb30.TNameBuffer;
  end;
var
  Adapter: TAStat;              // info about a network adapter
  AdapterList: Nb30.TLanaEnum;  // numbers for current LAN adapters
  Ncb: Nb30.TNCB;               // network control block descriptor
  I: Integer;                   // loops thru all adapters in list
  // ---------------------------------------------------------------------------
  function NetBiosSucceeded(const RetCode: AnsiChar): Boolean;
  begin
    // Check RetCode is good NetBios function return value
    Result := UCHAR(RetCode) = Nb30.NRC_GOODRET;
  end;
  // ---------------------------------------------------------------------------
begin
  // Assume not adapter
  Result := '';
  // Get list of adapters
  FillChar(Ncb, SizeOf(Ncb), 0);
  Ncb.ncb_command := AnsiChar(Nb30.NCBENUM);
  Ncb.ncb_buffer := PAnsiChar(@AdapterList);
  Ncb.ncb_length := SizeOf(AdapterList);
  if not NetBiosSucceeded(Nb30.Netbios(@Ncb)) then
    Exit;
  // Get status of each adapter, exiting when first valid one reached
  // MSDN cautions us not to assume lana[0] is valid
  for I := 0 to Pred(Integer(AdapterList.length)) do
  begin
    // reset the adapter
    FillChar(Ncb, SizeOf(Ncb), 0);
    Ncb.ncb_command := AnsiChar(Nb30.NCBRESET);
    Ncb.ncb_lana_num := AdapterList.lana[I];
    if not NetBiosSucceeded(Nb30.Netbios(@Ncb)) then
      Exit;
    // get status of adapter
    FillChar(Ncb, SizeOf(Ncb), 0);
    Ncb.ncb_command := AnsiChar(Nb30.NCBASTAT);
    Ncb.ncb_lana_num := AdapterList.lana[I];
    Ncb.ncb_callname := '*               ';
    Ncb.ncb_buffer := PAnsiChar(@Adapter);
    Ncb.ncb_length := SizeOf(Adapter);
    if NetBiosSucceeded(Nb30.Netbios(@Ncb)) then
    begin
      // we have a MAC address: return it
      with Adapter.Adapt do
        Result := Format(
          '%.2x-%.2x-%.2x-%.2x-%.2x-%.2x',
          [
            Ord(adapter_address[0]),
            Ord(adapter_address[1]),
            Ord(adapter_address[2]),
            Ord(adapter_address[3]),
            Ord(adapter_address[4]),
            Ord(adapter_address[5])
          ]
        );
      Exit;
    end;
  end;
end;

کد:
type
  TMacAddress = array [0..5] of Byte;

function inet_addr(const IPAddress: string): ULONG;
begin
  Result := ULONG(WinSock.inet_addr(PAnsiChar(AnsiString(IPAddress))));
end;

function SendARP(DestIP, SrcIP: ULONG; pMacAddr: Pointer; var PhyAddrLen: ULONG): DWORD; stdcall; external 'Iphlpapi.dll';

function GetMacAddress2(const IPAddress: string): TMacAddress;
var
  MaxMacAddrLen: ULONG;
begin
  MaxMacAddrLen := SizeOf(Result);
  if SendARP(inet_addr(IPAddress), 0, @Result, MaxMacAddrLen)<>NO_ERROR then begin
   // raise EMacAddressError.CreateFmt('Unable to do SendARP on address: ''%s''', [IPAddress]);
  end;
end;

بازم خواستید دارم.

البته به نظر من وقتی مک آدرس کارت شبکه شما همیشه در حال عوض شدن هست پس هیچ کسی نمی تواند برای شما مشکلی پیش بیاره.
البته اینم قبول دارم همین طور که نرم افزار هایی هستند که آی پی و مک آدرس مخفی می کنند، نرم افزار هایی هم وجود دارند که آی پی و مک آدرس درست را نشان میدن.