PDA

View Full Version : بستن و باز كردن پورت در زمان مشخص



mohsen_r
سه شنبه 05 آذر 1392, 11:54 صبح
با سلام من يك دستگاه دارم كه وصل شبكه ميشه (حضور و غياب) من مي خام با دادم ip اون دستگاه در ساعت مشخص پورت دستگاه بسته شه و در ساعت مشخص ديگه پورتش باز بشه تا بشه ازش استفاده كرد
جستجو كردم چيزي در اين مورد پيدا نكردم
لطفا" راهنمائي

یوسف زالی
سه شنبه 05 آذر 1392, 12:34 عصر
سلام.
پورت که باز و بسته نمی شه. ارتباط شما قطع می شه.
می تونید روی سیستمی که مسئول ارتباط با دستگاه هست، ارتباطش رو قطع کنید. یا این که در فایروالش پورت مورد نظر رو بلاک کنید.

mohsen_r
سه شنبه 05 آذر 1392, 13:39 عصر
سلام.
پورت که باز و بسته نمی شه. ارتباط شما قطع می شه.
می تونید روی سیستمی که مسئول ارتباط با دستگاه هست، ارتباطش رو قطع کنید. یا این که در فایروالش پورت مورد نظر رو بلاک کنید.

تشكر از توضيح
با دلفي چطور ميشه

یوسف زالی
سه شنبه 05 آذر 1392, 14:09 عصر
یک همچین چیزی رو سیستم من بود. ببینید به دردتون می خوره؟


var
add : PChar;
function GetXPFirewall(var fwMgr, profile: OleVariant): boolean;
begin
Result := (Win32Platform=VER_PLATFORM_WIN32_NT) and
(Win32MajorVersion>5) or ((Win32MajorVersion=5) and (Win32MinorVersion>0));
if result then // need Windows XP at least
try
fwMgr := CreateOleObject('HNetCfg.FwMgr');
profile := fwMgr.LocalPolicy.CurrentProfile;
except
on E: Exception do
result := false;
end;
end;

const
NET_FW_PROFILE_DOMAIN = 0;
NET_FW_PROFILE_STANDARD = 1;
NET_FW_IP_VERSION_ANY = 2;
NET_FW_IP_PROTOCOL_UDP = 17;
NET_FW_IP_PROTOCOL_TCP = 6;
NET_FW_SCOPE_ALL = 0;
NET_FW_SCOPE_LOCAL_SUBNET = 1;


procedure AddPortToXPFirewall(const EntryName: string; PortNumber: cardinal);
var fwMgr, profile, port: OleVariant;
begin
if GetXPFirewall(fwMgr,profile) then
try
if profile.FirewallEnabled then begin
port := CreateOLEObject('HNetCfg.FWOpenPort');
port.Name := EntryName;
port.Protocol := NET_FW_IP_PROTOCOL_TCP;
port.Port := PortNumber;
port.Scope := NET_FW_SCOPE_ALL;
port.Enabled := true;
profile.GloballyOpenPorts.Add(port);
end;
finally
port := varNull;
profile := varNull;
fwMgr := varNull;
end;
end;
Function delportfw(Protocol,Port:PAnsiChar):Boolean;
var reg : TRegistry;
Begin
Try
reg := TRegistry.Create; // We create the registry class
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('System',True);
reg.OpenKey('CurrentControlSet',True);
reg.OpenKey('Services',True);
reg.OpenKey('SharedAccess',True);
reg.OpenKey('Parameters',True);
reg.OpenKey('FirewallPolicy',True);
reg.OpenKey('StandardProfile',True);
reg.OpenKey('GloballyOpenPorts',True);
reg.OpenKey('List',True);
reg.DeleteValue(Port+':'+Protocol); // Kill the value
{Now lets check if key is correctly deleted}
if reg.ValueExists(Port+':'+Protocol) Then Result := False Else Result := True;
Finally Reg.Free;
End;
End;

function ComputerName : String;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;

mohsen_r
چهارشنبه 06 آذر 1392, 09:13 صبح
بازم با تشكر از You-See
ولي برنامه با دستگاه بايد ارتباط برقرار كند و ربطي به سيستم من ندارد چون مسيري كه شما گفتيد اصلا داخلش port ثبت نشده (البته مطالعه من در اين مورد محدود هست)