如何获取一个网段内网卡的MAC地址主机名及对应的IP?(100分)

  • 主题发起人 主题发起人 霖霖
  • 开始时间 开始时间

霖霖

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获取一个网段内网卡的MAC地址主机名及对应的IP?请大虾赐教!!!
 
没有高手出现吗?
 
可以用WINPCAP写一个SNIFFER程序来监听的,因为网络的机器都会定时发ARP广播的
不过我不知道在DELPHI下怎么用winpcap
我是在VC下用过的,很简单
 
{* 获取本机的IP地址}
function TNet.GetLocalIP: string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do begin
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
WSACleanup;
end;
 
获得本机的MAC地址
Function NBGetAdapterAddress(a:integer) : String;
Implementation

{$R *.DFM}

Procedure TForm1.Button1Click(Sender : TObject);
Begin
label1.Caption:=NBGetAdapterAddress(StrtoInt(Edit1.Text));
End;

Function NBGetAdapterAddress(a:Integer) : String;
Var

NCB : TNCB; // Netbios control block file://NetBios控制块
ADAPTER : TADAPTERSTATUS; // Netbios adapter status//取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer; // Temporary work value//临时变量
cRC : Char; // Netbios return code//NetBios返回值
strTemp : String; // Temporary string//临时变量

Begin
// Initialize
Result := '';

Try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));

// Issue enum command
NCB.ncb_command := Chr(NCBENUM);
cRC := NetBios(@NCB);

// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;

// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;

// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);

// Convert it to string
strTemp := '';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[in
tIdx]),2);
Result := strTemp;
Finally
End;
End;
End.
 
向局域网中的各台机器发送消息,然后返回到本机中。我个人的想法,通过服务程序来实现!
 
To 刀剑如梦:谢了!
To everyone:我是想实现扫描一个网段的IP、主机名、MAC地址。有哪位大虾做过?
 
向局域网各个机器发ARP包,做循环就可以了,用IPHLPAPI.H的SENDARP()函数
但是这个办法不能得到机器名,得到机器名可以用GETHOSTBYNAME就可以了
 
To tty_xiaotao: Delphi 中好像找不到 SENDARP() 这个函数,我在 Win32 SDK Reference 中也没找到, GETHOSTBYNAME 可以。
 
SendARP()是再IPHLPAPI.DLL中的一个函数
你需要下载MS的最新的SDK才可以使用
 
我有[黑客扫描器源码]
谁要就留email
 
给我一个吧? 谢谢!
dydxd@hotmail.com
 
To laoli:那就给我一份吧,谢谢了。EMail:coolzwl@51.net
 
to 霖霖
请查收
 
To laoli:呵呵,收到了!
不过好像还不行,没有实现的子程序,
干脆把整个文件发给我了,我给你分就是了!
 
不是我写的,我在delphi6正常编译通过
功能很多,你花点时间慢慢看吧
 
子程序在已经包含在目录,请自己设置
分别是:
function_1.pas,
icmp.
ping
pop3_detect
pop3_scan
report
share_pass
Spec
dict
 
这个论坛就有: http://www.delphibbs.com/delphibbs/dispq.asp?lid=596039
IP,工作组,用户名,机器名,MAC地址,我试过,还可以跨网段.
 
To laoli: 再给我发一次吧,那个老是出错,用不了。
 
To laoli: 能否给我也来一份,谢谢 tianhf@ham.cn
 
后退
顶部