IP问题:应该比较难,希望各位高手指点一下(100分)

  • 主题发起人 主题发起人 ranivy
  • 开始时间 开始时间
R

ranivy

Unregistered / Unconfirmed
GUEST, unregistred user!
大家应该都用过天网吧?要是有人用UDP或其他协议发数据包给你,它就会知道对方的IP
地址
我想知道它是怎么做到的?用什么函数?
 
在win98下比较困难,要利用VXD。
在win200下就好办了。其例程见http://www.playicq.com/dispdoc.php?t=27&id=1659

 
怎样用delphi制作一个IPhunter
有人说现在的程序员成了组装工人,其实很有道理,利用控件模块+少量代码就可以实现,delphi 5.0提供了丰富的internet控件,利用tcp/ip 客户端-服务端就可以解决问题。关键的控件是serversocket,我们模仿iphunter的界面用一个button1(按钮),一个combobox1(用于显示),这三个最基本的控件放置到空白窗体上就可以开始写代码了。

首先,这个combobox1必须能显示多个ip,我们定一个变量y来累加combobox1.items[y],
var y:integer;

我们的思路如下,当serversocket活动的port(端口)收到基于tcp/ip协议的连结请求时候,返回对方的ip值,传递给combobox显示出来。由button1控制serversocket的激活,也就是打开关闭端口。
我们在serversocket的on clientconnect事件中加入一下代码

procedure tform1.serversocket11clientconnect(sender: tobject;
socket: tcustomwinsocket);
begin
combobox1.items.insert(y,'');//加入一条空纪录
combobox1.items[y]:=socket.remoteaddress;//获取对方的ip
label1.text:='共捕获'+inttostr(y+1)+'个ip';//用一个标签来显示一共抓了多少ip
y:=y+1;//计数变量加1
socket.close;
end;
现在,将button1的caption属性设置为 '开始',在它的单击事件中加入以下代码
procedure tform1.speedbutton7click(sender: tobject);
begin
if speedbutton7.caption='开始' then
begin
serversocket11.port:=80;//这句可以在serversocket属性中设定,捕获浏览器的连接
serversocket11.active:=true;//激活端口
speedbutton7.caption:='停止';
end
else
begin
serversocket11.active:=false;//关闭端口
speedbutton7.caption:='开始';
combobox1.clear;//结束捕获,清空历史信息
y:=0;//计数变量复位
end;
end;



资料整理:编程先锋 http://wlbookwl.myrice.com 站长:小黑侠
 
TO:gonghh,谢谢你,其实我也在尝试你说的方法,而且我觉得用VB来做比较容易
 
TO:redfox,你的方法我早试过了,不知道是不是我道行不够深,我觉得象你那样做的话
只能收到从端口80进来的数据包,天网不是能收到从所有端口进来的数据包吗?
它每捕获一个数据包就能说出IP和端口,我就是想要那种效果

 
小弟还有一点问题,我尝试在程序里动态生成8888个SERVERSOCKET然后分别把他们的PORT
设为1到8888,可是最多只能有18个SERVERSCOKET,不燃就会报错,这是怎么回事呢?
 
to:gnnghh 对于那个例子,好象太复杂了(我是菜鸟),我不需要它分析数据包的内容,只是想在
收到包的时候程序能通知我一下
 
在其OnCap事件下写:
if (proto='UDP') and (sourceIP<>ip) then //如果是UDP协议并且源ip地址不是本机ip
begin
ListBox1.Items.Add(sourceIP); //那么就记录 源ip地址。
end;

 
我没搞清楚你的目的,实际这是捕获IP数据包,以下两个网址可以帮助你。
http://winpcap.polito.it/install/bin/WinPcap_3_0_a.exe 可以得到Winpcap,抓包用的
http://home1.stofanet.dk/nitezhifter/files/Delphi%20Pcap.zip 是delphi版的例子。
很好用的,可以满足需要。

 
我的目的是做个类似防火墙的软件,有人发数据给我的时候通知我一下,
我不需要知道是哪类型的数据包,也不需要拦截它,
只是想知道什么时候有哪个IP发数据给我
 
多人接受答案了。
 
winpcap 对ADSL,和拨号网络 不行啊,network,monitor也加了
 
后退
顶部