SNMP
简介
SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是著名的SNMP。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。现在SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
SNMP的体系结构是围绕着以下四个概念和目标进行设计的:保持管理代理(agent)的软件成本尽可能低;最大限度地保持远程管理的功能,以便充分利用Internet的网络资源;体系结构必须有扩充的余地;保持SNMP的独立性,不依赖于具体的计算机、网关和网络传输协议。在最近的改进中,又加入了保证SNMP体系本身安全性的目标。
1.1类结构
TIdSNMP = class(TIdUDPClient)
private
fCommunity: string;
fTrapPort: Integer;
procedure SetCommunity(const Value: string);
public
Query : TSNMPInfo;
Reply : TSNMPInfo;
Trap : TSNMPInfo;
constructor Create(aOwner : TComponent); override;
destructor Destroy; override;
function SendQuery : boolean;
function QuickSend(const Mib, Community, Host:string; var Value:string):Boolean;
function QuickSendTrap(const Dest, Enterprise, Community: string;
Port, Generic, Specific: integer; MIBName, MIBValue: TStringList): integer;
function QuickReceiveTrap(var Source, Enterprise, Community: string;
var Port, Generic, Specific, Seconds: integer; var MIBName, MIBValue: TStringList): integer;
function SendTrap: integer;
function ReceiveTrap: integer;
published
property Port default 161;
property TrapPort : Integer read fTrapPort Write fTrapPort default 162;
property Community : string read fCommunity write SetCommunity;
end;
从以上可以看出SNMP的控件实际上是从UDP继承而来。基本的通讯应该是采用UDP方式。
2.1继承
TComponent ---TidBaseComponent---TidComponent---TidUDPBase---TidUDPClient---TidSNMP
2.2属性
Active
property Active: Boolean read GetActive write SetActive Default False;
function TIdUDPBase.GetActive: Boolean;
begin
Result := FDsgnActive or (Assigned(FBinding) and FBinding.HandleAllocated);
end;
//访问Active时(分配了 TIdSocketHandle可以认为是true)
procedure TIdUDPBase.SetActive(const Value: Boolean);
begin
if (Active <> Value) then begin
if not ((csDesigning in ComponentState) or (csLoading in ComponentState)) then begin
if Value then begin
GetBinding; // value = true时创建SOCKET
end
else begin
CloseBinding; //value = false时销毁SOCKET
end;
end
else begin // don't activate at designtime (or during loading of properties) {Do not Localize}
FDsgnActive := Value;
end;
end;
end;
//修改Active时,要做的事情。
BroadcastEnabled 广播开启,向同一网段的所有IP的PORT发送数据
property BroadcastEnabled: Boolean read FBroadcastEnabled write SetBroadcastEnabled Default False;
procedure TIdUDPBase.SetBroadcastEnabled(const Value: Boolean);
begin
if FBroadCastEnabled <> Value then begin
FBroadcastEnabled := Value; //保存新值
if Active then begin
BroadcastEnabledChanged; //设置套接口的选项,实际上调用了SetSockOpt函数,设置SOCKET参数
end;
end;
end;
ABinding.SetSockOpt(Id_SOL_SOCKET, Id_SO_BROADCAST, PChar(@BroadCastData), SizeOf(BroadCastData));
实际上就是以上这句话。
BufferSize 该值是UDP传输数据的默认值
property BufferSize: Integer read FBufferSize write FBufferSize default ID_UDP_BUFFERSIZE;
ID_UDP_BUFFERSIZE = 8192
Communit