📄 tools.pas
字号:
Nbt.Stop;
//if NbtHasItem then AddIpAddrRange(edtNbtIP1.Text, edtNbtIP2.Text);
end
end;
procedure TToolsForm.lvNbtDblClick(Sender: TObject);
begin
if lvNbt.Selected <> nil then
with MainForm do
begin
LeftPageCtrl.ActivePageIndex := 2;
if not cbIP.Checked then Edit1.Text := trim(lvNbt.Selected.SubItems[1])
else Edit1.Text := trim(lvNbt.Selected.Caption);
BtnFindClick(Self);
end;
end;
procedure TToolsForm.NbtEndEvent(Sender: TObject);
begin
//btnNbt.Enabled := true;
btnNbt.Tag := 0;
btnNbt.Caption := '开始';
edtNbtIP1.Enabled := true;
edtNbtIP2.Enabled := true;
spInterval.Enabled := true;
pnlStatus.Caption := '双击以搜索该主机';
if WindowState = wsMinimized then ShowWindow(Handle, SW_RESTORE);
//BorderIcons := [biSystemMenu,biMaximize];
if NbtHasItem then AddIpAddrRange(edtNbtIP1.Text, edtNbtIP2.Text);
end;
procedure TToolsForm.NbtSendEvent(Sender: TObject);
begin
pnlStatus.Caption := Nbt.StatusString;
end;
procedure TToolsForm.NbtAddNodeEvent(Sender: TObject);
var
TemNode : TTreeNode;
host : string;
MyItemPtr : PMyTreeItem;
begin
NbtHasItem := true;
//caption := string(Sender);
if cbAddToTree.Checked then
with MainForm do
begin
LeftPageCtrl.ActivePageIndex := 0;
SearchPageCtrl.ActivePageIndex := 1;
host := '\\' + string(Sender);
New(MyItemPtr);
TemNode := IpTree.Items.AddChild(IpTree.Items[0], host);
TemNode.ImageIndex := 7;
TemNode.SelectedIndex := 7;
IpTree.TopItem.Expand(false);
MyItemPtr^.group := IpTree.Items[0].Text;
MyItemPtr^.dirName := host;
TemNode.Data := MyItemPtr;
end;
if (not cbNbtDataLoad.Checked) then AddNbtData(lvNbt.Items[0]); ///
end;
procedure TToolsForm.N1Click(Sender: TObject);
begin
CurListView.Items.Clear;
end;
function FixLenStr(s: string; len: integer): string;
begin
result := format('%-'+inttostr(len)+'s', [s]);
end;
procedure TToolsForm.SaveNbtData;
var
NbtDataFile : file of TNbtRecord;
i : integer;
NR : TNbtRecord;
//NumWritten : integer;
begin
if lvNbtDb.Items.Count <> 0 then
begin
AssignFile(NbtDataFile, AppDir + '\NbtData.db');
ReWrite(NbtDataFile);
for i:=0 to lvNbtDb.Items.Count-1 do
begin
NR.IpAddr := trim(lvNbtDb.Items[i].Caption);
NR.GroupName := trim(lvNbtDb.Items[i].SubItems[0]);
NR.HostName := trim(lvNbtDb.Items[i].SubItems[1]);
NR.UserName := trim(lvNbtDb.Items[i].SubItems[2]);
NR.MacAddr := trim(lvNbtDb.Items[i].SubItems[3]);
//NR.Separator := #13;
{Block}Write(NbtDataFile, NR{, SizeOf(NR), NumWritten});
end;
CloseFile(NbtDataFile);
end;
end;
procedure TToolsForm.LoadNbtData;
var
NbtDataFile : file of TNbtRecord;
item : TListItem;
i : integer;
NR : TNbtRecord;
//NumWritten : integer;
begin
if not FileExists('NbtData.db') then exit;
AssignFile(NbtDataFile, 'NbtData.db');
Reset(NbtDataFile);
lvNbtDb.Items.BeginUpdate;
while not eof(NbtDataFile) do
begin
read(NbtDataFile, NR);
item := lvNbtDb.Items.Add;
item.Caption := trim(NR.IpAddr);
for i := 0 to 3 do item.SubItems.Add('');
item.SubItems[0] := trim(NR.GroupName);
item.SubItems[1] := trim(NR.HostName);
item.SubItems[2] := trim(NR.UserName);
item.SubItems[3] := trim(NR.MacAddr);
Application.ProcessMessages;
end;
lvNbtDb.Items.EndUpdate;
CloseFile(NbtDataFile);
Label20.Caption := '共 ' + inttostr(lvNbtDb.Items.Count) + ' 台主机';
end;
procedure TToolsForm.AddNbtData(Item: TListItem);
var
TemItem : TListItem;
i : integer;
begin
for i := 0 to lvNbtDb.Items.Count - 1 do
begin
if (trim(lvNbtDb.Items[i].Caption) = trim(Item.Caption))
and(trim(lvNbtDb.Items[i].SubItems[0]) = trim(Item.SubItems[0]))
and(trim(lvNbtDb.Items[i].SubItems[1]) = trim(Item.SubItems[1]))
and(trim(lvNbtDb.Items[i].SubItems[2]) = trim(Item.SubItems[2]))
and(trim(lvNbtDb.Items[i].SubItems[3]) = trim(Item.SubItems[3]))
then exit;
//Application.ProcessMessages;
end;
TemItem := lvNbtDb.Items.Add;
TemItem.Caption := Item.Caption;
TemItem.SubItems.Add(Item.SubItems[0]);
TemItem.SubItems.Add(Item.SubItems[1]);
TemItem.SubItems.Add(Item.SubItems[2]);
TemItem.SubItems.Add(Item.SubItems[3]);
Label20.Caption := '共 ' + inttostr(lvNbtDb.Items.Count) + ' 台主机';
Application.ProcessMessages;
end;
procedure TToolsForm.N2Click(Sender: TObject);
var
f : TextFile;
i, j : integer;
s, str, s_h : string;
begin
if CurListView.Items.Count = 0 then
begin
//Application.MessageBox('没有可保存的内容! ','Save File',MB_OK );
ShowMessage('没有可保存的内容! ');
exit;
end;
s := TimeToStr(time);
for i:=1 to length(s) do if s[i]=':' then s[i]:='-';
// 注意 PageCtrl.ActivePage.Caption 中不应含有文件名中不允许使用的字符。
SaveDlg.FileName := PageCtrl.ActivePage.Caption +'('+datetostr(now)+'-'+s+')';
if SaveDlg.Execute then
begin
NewStyleControls := False;
assignfile(f,SaveDlg.filename);
rewrite(f);
for j:=0 to (CurListView.Columns.Count - 1)
do s_h := s_h + FixLenStr(CurListView.Columns[j].Caption, 15) + #9;
writeln(f, s_h);
//for j:=0 to (CurListView.Columns.Count - 1) do write(f, ' ');
writeln(f);
for i:=0 to CurListView.Items.Count-1 do
begin
str := FixLenStr(CurListView.Items[i].Caption, 15) + #9; //#9 is tab
for j:=0 to (CurListView.Items[i].SubItems.Count-1) do
str := str + FixLenStr(CurListView.Items[i].SubItems[j], 15) + #9;
writeln(f, str);
//writeln(f);
end;
CloseFile(f);
NewStyleControls := true;
end;
end;
procedure TToolsForm.PopupMenu1Popup(Sender: TObject);
begin
PageCtrlChange(Self);
N1.Enabled := false;
N2.Enabled := false;
if CurListView.Items.Count <> 0 then
begin
N1.Enabled := true;
N2.Enabled := true;
end;
end;
procedure TToolsForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if (btnNbt.tag = 1)or(btnScanPort.tag = 1)or(btnPing.tag = 1) then
begin
CanClose := false;
ShowMessage('扫描尚未完成,请稍候。');
//Application.MessageBox('扫描尚未完成,请稍候。', '网络工具', 0);
end
else CanClose := true;
end;
//------------------------------------------------------------------------------
procedure TToolsForm.PortShowProgress(Sender: TObject);
begin
with Sender as TScanStatus do
Label11.Caption := '正在扫描 ' + IP + ' 端口:' + Port;
end;
procedure TToolsForm.PortOnConnect(Sender: TObject);
var
item : TListItem;
TemNode : TTreeNode;
host : string;
MyItemPtr : PMyTreeItem;
status : TScanStatus;
begin
PortScanHasItem := true;
//ListBox1.Items.Add(string(Sender));
item := lvPortScan.Items.Add;
status := TScanStatus(Sender);
item.Caption := status.IP;//string(Sender);
item.SubItems.Add(status.Port{cbScanPort.Text});
if cbAddToTree2.Checked and (PreviousPortScanIP <> status.IP) then
with MainForm do
begin
LeftPageCtrl.ActivePageIndex := 0;
SearchPageCtrl.ActivePageIndex := 1;
host := '\\' + status.IP;
PreviousPortScanIP := status.IP; // prevent duplicate IP when scan in a port range.
New(MyItemPtr);
TemNode := IpTree.Items.AddChild(IpTree.Items[0], host);
TemNode.ImageIndex := 7;
TemNode.SelectedIndex := 7;
IpTree.Items[0].Expand(false);
MyItemPtr^.group := IpTree.Items[0].Text;
MyItemPtr^.dirName := host;
TemNode.Data := MyItemPtr;
end;
end;
procedure TToolsForm.PortOnExitScan(Sender: TObject);
begin
//btnScanPort.Enabled := true;
btnScanPort.Tag := 0;
btnScanPort.Caption := '开始';
edtScanIP1.Enabled := true;
edtScanIP2.Enabled := true;
cbScanPort1.Enabled := true;
cbScanPort2.Enabled := true;
spTimeOut.Enabled := true;
Label11.Caption := '完成';
if WindowState = wsMinimized then ShowWindow(Handle, SW_RESTORE);
if PortScanHasItem then AddIpAddrRange(edtScanIP1.Text, edtScanIP2.Text);
end;
procedure TToolsForm.btnScanPortClick(Sender: TObject);
var
ScanThread: TScanTcpPortThread;
begin
if btnScanPort.Tag = 0 then
begin
PortScanHasItem := false;
btnScanPort.Tag := 1;
btnScanPort.Caption := '停止';
if (not IsLegalIP(edtScanIP1.Text))or(not IsLegalIP(edtScanIP2.Text)) then
begin
ShowMessage('IP地址非法,请重新输入');
//Application.MessageBox('IP地址非法,请重新输入。', '网络工具', 0);
exit;
end;
ScanThread := TScanTcpPortThread.Create(edtScanIP1.Text, edtScanIP2.Text,
strtoint(cbScanPort1.Text), strtoint(cbScanPort2.Text), spTimeOut.Value);
ScanThread.OnSendEvent := PortShowProgress;
ScanThread.OnConnectEvent := PortOnConnect;
ScanThread.OnExitEvent := PortOnExitScan;
ScanThread.Resume;
//btnScanPort.Enabled := false;
edtScanIP1.Enabled := false;
edtScanIP2.Enabled := false;
cbScanPort1.Enabled := false;
cbScanPort2.Enabled := false;
spTimeOut.Enabled := false;
exit_tcp_port_scan := false;
end
else
begin
btnScanPort.Tag := 0;
btnScanPort.Caption := '开始';
exit_tcp_port_scan := true;
//if PortScanHasItem then AddIpAddrRange(edtScanIP1.Text, edtScanIP2.Text);
end
end;
procedure TToolsForm.lvPortScanDblClick(Sender: TObject);
var
Exe : TExecuteThread;
begin
if lvPortScan.Selected <> nil then
begin
if lvPortScan.Selected.SubItems[0] = '80' then
begin
//ExecuteFile('http://'+lvPortScan.Selected.Caption,'','',1);
Exe:=TExecuteThread.Create(true);
Exe.ExeFile := 'http://'+lvPortScan.Selected.Caption;
Exe.ExeDir := '';
Exe.FreeOnTerminate := true;
Exe.Resume;
end
else
if lvPortScan.Selected.SubItems[0] = '21' then
begin
//ExecuteFile('ftp://'+lvPortScan.Selected.Caption,'','',1);
Exe:=TExecuteThread.Create(true);
Exe.ExeFile := 'ftp://'+lvPortScan.Selected.Caption;
Exe.ExeDir := '';
Exe.FreeOnTerminate := true;
Exe.Resume;
end
else
if lvPortScan.Selected.SubItems[0] = '23' then
begin
WinExec(pchar('telnet '+lvPortScan.Selected.Caption), 1);
end
else
if lvPortScan.Selected.SubItems[0] = '139' then
begin
with MainForm do
begin
LeftPageCtrl.ActivePageIndex := 2;
Edit1.Text := trim(lvPortScan.Selected.Caption);
BtnFindClick(Self);
end;
end
end;
end;
procedure TToolsForm.PageCtrlChange(Sender: TObject);
begin
case PageCtrl.ActivePageIndex of
0:
begin
CurListView := IPListView;
end;
1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -