如何得到局域网上其他机器的网卡物理地址是用ping吗?(200分)

  • 主题发起人 主题发起人 yl
  • 开始时间 开始时间
Y

yl

Unregistered / Unconfirmed
GUEST, unregistred user!
as title,具体一点.
 
ping xxx.xxx.xxx.xxx
arp -a
 
可以用命令
nbtstat -A XXX.XXX.XXX.XXX
对方的工作组/机器名/Mac地址全都来了.

编程我不会 :(
 
我试了一下, 发现TOWN的能达到你的目的, 我编了一个简单的例子,供你参考:

procedure TForm1.Button1Click(Sender: TObject);
VAR TEMP: TSTRINGLIST;
begin
TEMP := TSTRINGLIST.Create;
Shellexecute(handle, 'OPEN', PChar('nbtstat -A 127.2.1.2 > TEMP.TXT'), nil, nil,sw_shownormal);
TEMP.LoadFromFile('C:/WINDOWS/TEMP.TXT');
IF TEMP.Count > 0 THEN
BEGIN
IF POS('MAC',TEMP.Strings[TEMP.COUNT-1])>0 THEN
SHOWMESSAGE(COPY(TEMP.STRINGS[TEMP.COUNT-1],15,17));
END;
TEMP.FREE;
end;
 
lhz:
能给讲讲arp -a是怎么工作的吗?
我试了试连续ping 本网段内10台机器,然后用asp -a 只能显示
最后ping的几台机器。有没有办法显示全部能够ping通的机器的
mac地址呢?
 
再补充点:
假设我开256个线程同时ping本网段内的全部机器,这样会有什么结果呢?
arp -a 后,会不会把全部能ping通的机器显示出来呢?
 
不行的.arp的缓冲区是有限制的,只能存放几个地址,所以只能看到最后几个.
要全部看到,只能逐段进行.你要知道全部的,就用nbtstat吧.
 
town:
PING 一个 ARP 一个可以
ARP 是 TCP/IP 协议中的一个子协议,用来把 IP 地址变为 MAC 地址的
 
wuyi:
多谢你的程序,但好像有点问题.
Shellexecute(handle, 'OPEN', PChar('nbtstat -A 127.2.1.2 > TEMP.TXT'), nil, nil,sw_shownormal)
nbtstat -A 127.2.1.2 > TEMP.TXT是个dos重定向的命令.
程序无法运行.
Shellexecute(handle, 'OPEN', PChar('nbtstat -A 127.2.1.2 '), nil, nil,sw_shownormal)就可.
但下面运行不了.
如何delphi调用dos命令,带参与重定向.

还留50分.


 
程序在我在机器能运行, 为什么你的不行呢? 你的程序怎么无法运行?
 
既然是EXE文件的重定向,就应该用CreateProcess.
用CreateProcess肯定可以实现.
 
wuyi
我用下面的程序得到mac地址
WinExec('COMMAND.COM /C nbtstat -A 159.226.4.3 >I:/b.txt', SW_HIDE);
完成以后
改成
WinExec('COMMAND.COM /C nbtstat -A 159.226.3.2 >I:/a.txt', SW_HIDE);
再run
就说打不开a.txt,
重新打开delphi再运行就ok,
program 与你例子一样.
这已是话外题,多谢相助.
lhz:
create process how to do it?


 
wuyi
我用下面的程序得到mac地址
WinExec('COMMAND.COM /C nbtstat -A 159.226.4.3 >I:/b.txt', SW_HIDE);
完成以后
改成
WinExec('COMMAND.COM /C nbtstat -A 159.226.3.2 >I:/a.txt', SW_HIDE);
再run
就说打不开a.txt,
重新打开delphi再运行就ok,
program 与你例子一样.
这已是话外题,多谢相助.
lhz:
create process how to do it?


 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部