如何取得已知IP的远程机器的网卡物理地址?(100分)

  • 主题发起人 主题发起人 youngwhz
  • 开始时间 开始时间
1)winexec(Pchar('command.com /C nbtstat -A destip > c:/tmp.txt'),sw_hide);
然后分析tmp.txt文件就可以了。
2)都说了arp报文是不能跨网段的,它不能被路由器转发。
 
To g622:

很感谢你的解答。

因为我现在面临的问题是:

我能够进入相应的网段,部分机器IP已知,部分机器网卡物理地址已知,

只是要在程序中实现各机器间的通讯和分析,

故,还要请教你如何在程序中发送报文?

多谢!
 
to:喜玛拉雅, 有空给我一个。snedyjy@263.net
 
to:喜玛拉雅, 有空给我一个。cy03jsjzx@zpeb.sinopec.com.cn
给50分。
 
to:喜玛拉雅, 有空给我一个。vc3000@sina.com
给60分。
 
我已经用纯delphi实现远程IP地址与MAC,PCNAME USER AND WORKGROU的获取.在做一个小软件.已经开始发售.
功能是实现IP地址监控与记录用户开关机等信息.不需要对方配合.
 
ecfan1:
you can do this if the target doesn't install NETBIOS protocol?
i don't think so.
 
[h1]SaveNight:
NetBIOS over TCP/IP;
那你就帮我测试一下啊!只保留TCP/IP.应该没有问题.[/h1]
当然问题还是很多的,你是知道的.
都想用来做IP监控,都不太可靠.这个世界什么都可以被欺骗的.呵呵!
欢迎上来聊!
有高招告诉我吧!
 
我已经实现了这个功能,不过是局域网、2000下,调用iphlpapi.dll中的sendarp函数
function SendARP(DestIP:ipaddr;SrcIP:ipaddr;pMacAddr:pulong;PhyAddrLen:pulong):DWORD;
stdCall; external 'IPHLPAPI.DLL'

其中注意:
type
ipaddr = longint;
pulong = ^u_long;
然后源码如下:



unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure getmacbyip(const ipaddress: WideString;
var macaddress, status: OleVariant);
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure Tform1.getmacbyip(const ipaddress: WideString;
var macaddress, status: OleVariant);
var
destip:integer;
pmacaddr:pulong;
addrlen:u_long;
macaddr: array [1..6] of byte;
p:pbyte;
s:string;
i:integer;
ipstr:string;
begin
IPstr := IPaddress;

DestIP := inet_addr(pchar(IPstr));
pMacAddr := pulong(@MacAddr);
AddrLen := sizeof(MacAddr);
if SendARP(DestIP, 0, pMacAddr, @AddrLen) = 0 then
begin
s := '';
p :=pbyte(pMacAddr);
if ((p<>nil) and (AddrLen>0)) then
begin
for i := 1 to AddrLen do
begin
s := s + IntToHex(p^,2) + '-';
p := Pointer(Integer(p)+SizeOf(Byte));
end;
SetLength(s,Length(s)-1);
end;
end;
macaddress:=s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
status,macaddr:olevariant;
begin
getmacbyip(edit1.Text,macaddr,status);
label1.Caption:=macaddr;
end;

end.

希望能有所帮助.
 
to:喜玛拉雅,
不吝赐教,发我一个。new.net@263.net
 
to:喜玛拉雅,
发给我一个吧
landina@x263.net
 
to:喜玛拉雅
也给我一份。谢谢了。Feizei@21cn.com
 
跨路由器是不可能的,NETBIOS跟TCP/IP没什么联系吧,NETBIOS是
局域网内最快的协议,不可路由,当一台机器要与其他机器通讯时
先查本机缓存,看是否有对方的MAC地址,如果有直接产生IP包发送
如没有发一个广播查对方MAC,如果跨网段,路由器会把自己的MAC
地址给它,路由器收到IP包后在处理,所以查跨网段的MAC是不可能的
查出来也是路由器的
 
后退
顶部