نمایش نتایج 1 تا 14 از 14

نام تاپیک: نوشتن برنامه برای قطع ارتباط یکی از کلاینت ها

  1. #1

    Question نوشتن برنامه برای قطع ارتباط یکی از کلاینت ها

    سلام

    یک شبکه Lan داریم که به صورت WorkGroup هست و یکی از کامپیوترها سرور اینترنته و تعدادی هم کلاینت هستند.

    چطور میشه برنامه ای نوشت که ارتباط بین سرور و یک کلاینت خاص رو برای مدت مشخصی قطع کنه؟

    یعنی هیچ بسته ای بین سرور و اون کامپیوتر رد و بدل نشه؟!

    در واقع میخوام از طریق سرور ارتباط اون کلاینت رو با اینترنت قطع کنم !

    ممنون میشم راهنمایی کنید.

  2. #2
    کاربر دائمی آواتار Touska
    تاریخ عضویت
    مرداد 1383
    محل زندگی
    ایران زمین
    سن
    39
    پست
    1,988
    نقل قول نوشته شده توسط Mahdi_Delphi
    سلام

    یک شبکه Lan داریم که به صورت WorkGroup هست و یکی از کامپیوترها سرور اینترنته و تعدادی هم کلاینت هستند.

    چطور میشه برنامه ای نوشت که ارتباط بین سرور و یک کلاینت خاص رو برای مدت مشخصی قطع کنه؟

    یعنی هیچ بسته ای بین سرور و اون کامپیوتر رد و بدل نشه؟!

    در واقع میخوام از طریق سرور ارتباط اون کلاینت رو با اینترنت قطع کنم !

    ممنون میشم راهنمایی کنید.
    برای این کار شما باید یک سرور و کلاینت با Indy طراحی کنید که وقتی سرور دستور داد کلاینت

    قفل گردد یا کارت شبکه فرد رو Disable کنید :

                 RE: Disable/Enable Network

    Bowers, Michael P. ISD
    Tue, 28 Jun 2005 23:05:14 -0700

    I did this just recently as a quick test for a proof of concept. It
    uses the SetupAPI header translation from Project Jedi and the rest is
    adapted from source from the Microsoft Win2K3 DDK. It works in
    Win2K/WinXP (the only platforms of interest in my work) but may work in
    others. YMMV.


    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    Forms,
    Dialogs, StdCtrls, SetupAPI;

    const
    GUID_DEVCLASS_NET: TGUID = '{4D36E972-E325-11CE-BFC1-08002BE10318}';

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    function StateChange(NewState, SelectedItem: cardinal; hDevInfo:
    HDEVINFO): boolean;
    var
    PropChangeParams: SP_PROPCHANGE_PARAMS;
    DeviceInfoData: SP_DEVINFO_DATA;
    begin
    DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);

    // Get handle to selected item
    if not SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, DeviceInfoData)
    then
    begin
    Result := False;
    Exit;
    end;

    // Set the PropChangeParams structure for this item
    PropChangeParams.ClassInstallHeader.InstallFunctio n :=
    DIF_PROPERTYCHANGE;
    PropChangeParams.ClassInstallHeader.cbSize :=
    SizeOf(SP_CLASSINSTALL_HEADER);
    PropChangeParams.Scope := DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange := NewState;

    if not SetupDiSetClassInstallParams(hDevInfo, @DeviceInfoData,
    PSPCLASSINSTALLHEADER(@PropChangeParams), SizeOf(PropChangeParams)) then
    begin
    Result := False;
    Exit;
    end;

    // Call the ClassInstaller and perform the change
    if not SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo,
    @DeviceInfoData) then
    begin
    Result := False;
    Exit;
    end;

    Result := True;
    end;

    //
    ------------------------------------------------------------------------
    -----

    function DisableNetAdapter: boolean;
    var
    hdi: HDEVINFO;
    begin
    hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT);

    if cardinal(hdi) = INVALID_HANDLE_VALUE then
    begin
    Result := False;
    end
    else
    begin
    Result := StateChange(DICS_DISABLE, 0, hdi);
    SetupDiDestroyDeviceInfoList(hdi);
    end;
    end;

    //
    ------------------------------------------------------------------------
    -----

    function EnableNetAdapter: boolean;
    var
    hdi: HDEVINFO;
    begin
    hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT);

    if cardinal(hdi) = INVALID_HANDLE_VALUE then
    begin
    Result := False;
    end
    else
    begin
    Result := StateChange(DICS_ENABLE, 0, hdi);
    SetupDiDestroyDeviceInfoList(hdi);
    end;
    end;

    //
    ------------------------------------------------------------------------
    -----

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    EnableNetAdapter;
    end;

    //
    ------------------------------------------------------------------------
    -----

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    DisableNetAdapter;
    end;

    //
    ------------------------------------------------------------------------
    -----

    end.


    ولی فکر کنم این کد در Win9X جواب بده تو Xp تست نکردم.

    موفق باشید :)

  3. #3
    برای این کار شما باید یک سرور و کلاینت با Indy طراحی کنید که وقتی سرور دستور داد کلاینت
    قفل گردد یا کارت شبکه فرد رو Disable کنید :
    ???????????????????

    برای فعال کردن دوباره اش هم حتماً ادمین باید زحمت بکشه بره پای سیستم کارت شبکه را enable کنه :D

  4. #4
    خیلی ممنون

    جناب Touska مثال فوق با Indy نوشته شده ؟!

    SetupAPI مزبوط به کامپوننت خاصیه ؟

    برای فعال کردن دوباره اش هم حتماً ادمین باید زحمت بکشه بره پای سیستم کارت شبکه را enable کنه
    من هنوز نتونستم کد رو تست کنم. ولی توی کد یه تابع برای Enable کردن هست.

    البته اطلاعات من در حدی نیست که قضاوت کنم و شما مسلماً بهتر میدونید.

    آیا راهی هست که فقط از طریق سرور، ادمین بتونه ارتباط یک کلاینت رو قطع کنه؟!
    (مثل برنامه های محدود کردن پهنای باند و سرعت کلاینتها)

    ممنون از راهنمایی دوستان گرامی

  5. #5
    من هنوز نتونستم کد رو تست کنم. ولی توی کد یه تابع برای Enable کردن هست.
    این در حالت Local بهت جواب میده اما زمانی که Lan غیر فعال میشه، به طور معمول امکان برقراری ارتباط با کامپیوتر مربوطه در شبکه غیر ممکن میشه

  6. #6
    این در حالت Local بهت جواب میده اما زمانی که Lan غیر فعال میشه، به طور معمول امکان برقراری ارتباط با کامپیوتر مربوطه در شبکه غیر ممکن میشه
    درسته،اصلاً به این موضوع فکر نکرده بودم !!!

  7. #7
    کاربر دائمی آواتار Touska
    تاریخ عضویت
    مرداد 1383
    محل زندگی
    ایران زمین
    سن
    39
    پست
    1,988
    من به اون فکر کرده بودم سرور زمان مشخص رو به کلاینت ارسال می کنه و

    کلاینت سر موقعش اونو فعال می کنه.

    پرسیدن برای زمان مشخصی :)
    آخرین ویرایش به وسیله Identifier : شنبه 13 آبان 1385 در 06:47 صبح

  8. #8
    حامد جان من به اون فکر کرده بودم سرور زمان مشخص رو به کلاینت ارسال می کنه و
    کلاینت سر موقعش اونو فعال می کنه.
    پرسیدن برای زمان مشخصی :)
    در این صورت انعطاف پذیری رو از دست میدهد؛
    برای انجام این کار میتونید از روش های مختلفی استفاده کنید

    1- استفاده از *** Connection و مدیریت اتصال آن توسط 3rd party Application جهت کنترل اینترنت.

    2- استفاده از Windows Packet Filter Framework و ایجاد محدودیت در زمان های مشخص، این فریم ورک به شما امکان می دهد که بتونید Packet ها ردو بدل شده را بررسی و ویرایش کنید .و با استفاده از این فریم ورک شما هیچ نیازی به برنامه نویسی سطح پایین ندارید.

    WinpkFilter

    موفق باشید

  9. #9
    کاربر دائمی آواتار nasr
    تاریخ عضویت
    آذر 1382
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره فکر هوا عشق زمین مال من است
    پست
    2,018
    نقل قول نوشته شده توسط Touska مشاهده تاپیک
    برای این کار شما باید یک سرور و کلاینت با Indy طراحی کنید که وقتی سرور دستور داد کلاینت

    قفل گردد یا کارت شبکه فرد رو Disable کنید :

                 RE: Disable/Enable Network

    Bowers, Michael P. ISD
    Tue, 28 Jun 2005 23:05:14 -0700

    I did this just recently as a quick test for a proof of concept. It
    uses the SetupAPI header translation from Project Jedi and the rest is
    adapted from source from the Microsoft Win2K3 DDK. It works in
    Win2K/WinXP (the only platforms of interest in my work) but may work in
    others. YMMV.


    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
    Forms,
    Dialogs, StdCtrls, SetupAPI;

    const
    GUID_DEVCLASS_NET: TGUID = '{4D36E972-E325-11CE-BFC1-08002BE10318}';

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    function StateChange(NewState, SelectedItem: cardinal; hDevInfo:
    HDEVINFO): boolean;
    var
    PropChangeParams: SP_PROPCHANGE_PARAMS;
    DeviceInfoData: SP_DEVINFO_DATA;
    begin
    DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);

    // Get handle to selected item
    if not SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, DeviceInfoData)
    then
    begin
    Result := False;
    Exit;
    end;

    // Set the PropChangeParams structure for this item
    PropChangeParams.ClassInstallHeader.InstallFunctio n :=
    DIF_PROPERTYCHANGE;
    PropChangeParams.ClassInstallHeader.cbSize :=
    SizeOf(SP_CLASSINSTALL_HEADER);
    PropChangeParams.Scope := DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange := NewState;

    if not SetupDiSetClassInstallParams(hDevInfo, @DeviceInfoData,
    PSPCLASSINSTALLHEADER(@PropChangeParams), SizeOf(PropChangeParams)) then
    begin
    Result := False;
    Exit;
    end;

    // Call the ClassInstaller and perform the change
    if not SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo,
    @DeviceInfoData) then
    begin
    Result := False;
    Exit;
    end;

    Result := True;
    end;

    //
    ------------------------------------------------------------------------
    -----

    function DisableNetAdapter: boolean;
    var
    hdi: HDEVINFO;
    begin
    hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT);

    if cardinal(hdi) = INVALID_HANDLE_VALUE then
    begin
    Result := False;
    end
    else
    begin
    Result := StateChange(DICS_DISABLE, 0, hdi);
    SetupDiDestroyDeviceInfoList(hdi);
    end;
    end;

    //
    ------------------------------------------------------------------------
    -----

    function EnableNetAdapter: boolean;
    var
    hdi: HDEVINFO;
    begin
    hdi := SetupDiGetClassDevs(@GUID_DEVCLASS_NET, nil, 0, DIGCF_PRESENT);

    if cardinal(hdi) = INVALID_HANDLE_VALUE then
    begin
    Result := False;
    end
    else
    begin
    Result := StateChange(DICS_ENABLE, 0, hdi);
    SetupDiDestroyDeviceInfoList(hdi);
    end;
    end;

    //
    ------------------------------------------------------------------------
    -----

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    EnableNetAdapter;
    end;

    //
    ------------------------------------------------------------------------
    -----

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    DisableNetAdapter;
    end;

    //
    ------------------------------------------------------------------------
    -----

    end.
    ولی فکر کنم این کد در Win9X جواب بده تو Xp تست نکردم.

    موفق باشید :)
    سلام
    این کد نمی تونه کارت شبکه را Disable یا Enable کنه!

  10. #10
    کاربر دائمی آواتار nasr
    تاریخ عضویت
    آذر 1382
    محل زندگی
    هر کجا هستم باشم آسمان مال من است پنجره فکر هوا عشق زمین مال من است
    پست
    2,018
    راهی نیست که بشه کارت شبکه را Disable و Enable کرد؟

  11. #11
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    در واقع میخوام از طریق سرور ارتباط اون کلاینت رو با اینترنت قطع کنم !
    شاید نوشتن یک سرویس و استفاده از ایندی برای فرستادن یک کد خاص به کلاینت خوب باشه.
    در این صورت سرویس مذکور موقعی که کد خاصی را دریافت کرد می تواند به جای غیر فعال کردن شبکه IP ی کلاینت را تغییر داده و مقدار Default Getway اونو حذف کند. البته این کار در صورتی که IP ها اتوماتیک تنظیم می شوند ممکنه موجب Confrit شدن بشه. ولی بهتر از Disable کردن شبکه است. برای این مشکل هم می تونید از Ip ی استفاده نمایید که در محدوده ی شبکه ی شما نیست البته باز هم سبب از دست دادن کل شبکه ی کلاینت مذکور می شوید.
    برای فرستادن پیام توسط ایندی مثال هست. تنظیم Ip هم قبلا توسط من یک برنامه گذاشته شده است.

  12. #12
    VIP آواتار دنیای دلفی
    تاریخ عضویت
    فروردین 1403
    محل زندگی
    یک جایی توی جنوب ایران
    پست
    1,298
    بهترین راه kill کردن وب برازرها است . از Task Manager

  13. #13
    کاربر دائمی
    تاریخ عضویت
    آبان 1386
    محل زندگی
    تهران
    پست
    159
    نقل قول نوشته شده توسط dkhatibi مشاهده تاپیک
    سرویس مذکور موقعی که کد خاصی را دریافت کرد می تواند به جای غیر فعال کردن شبکه IP ی کلاینت را تغییر داده و مقدار Default Getway اونو حذف کند. البته این کار در صورتی که IP ها اتوماتیک تنظیم می شوند ممکنه موجب Confrit شدن بشه. ولی بهتر از Disable کردن شبکه است.
    که کارت شبکه رو غیر فعال یا تغییر IP می دین دیگه از شبکه کامل خارج می شه؟ توصیه می کنم از security policy ها استفاده کنید. نمی دونم تو دلفی می شه تغییرشون داد ولی تو سایت مایکروسافت یه سری مثال برای security policy ها هست

  14. #14
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    که کارت شبکه رو غیر فعال یا تغییر IP می دین دیگه از شبکه کامل خارج می شه؟
    به هیچ وجه اینجوری نیست.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •