怎样编一个程序获取发udp包给我的人的ip地址(100分)

  • 主题发起人 主题发起人 ice-sword
  • 开始时间 开始时间
I

ice-sword

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟很困惑,怎样才能在使用udp协议的环境下获取同我相连结的人的ip呢,
如在oicq中,那位大虾能指点一下
 
试试(17) recvfrom():
读取一个 Datagram,并储存资料来源的位址。

格 式: int PASCAL FAR recvfrom( SOCKET s,
char FAR *buf,
int len,
int flags,
struct socketaddr FAR *from,
int FAR *fromlen );

参 数: s Socket 的识别码
buf 存放接收到的资料的暂存区
len buf 的长度
flags 此函式被呼叫的方式
from 资料来源的位址
fromlen from 的大小

传回值: 成功 - 接收到的资料长度 (若对方 Socket 已关闭,则为 0)
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

说明: 此函式用来读取资料并记录资料来源的位址。
对 Stream Socket 言,其作用与 recv() 相同,参数 from 及 fromlen 将不
被用到。
 
udp报文格式里是记录数据来源的 ,就是那个from参数...
 
在Delphi中使用NMUDP控件,在NMUDP控件的接收Message事件中有个FromIP参数,就是它了
 
请继续,如果分数不够我可以另外开贴子,能否说的详细些
 
你是要自己写一个接udp把文的程序哪?还是用控件写一个程序?
用控件的话,一般都会有from参数,读那个参数就是对方ip了,
如果自己调系统函数写,相应的函数也有from参数呀,直到读这个返回的参数就行了,
这是最简单的东西,因为系统已经提供了的,你只要看一下函数格式活控件属性
就搞定了.你要深入了解的话,找本书讲tcp/udp编程的书看看,还觉得不过瘾的话,
直接看udp的rfc了...
 
hapcoer, 你说的我不懂.

用wind2000的不是简单可行吗? 问题是如何获知localport呢? 否则,无法监测呀?
 
多谢各位,我看过NMUDP的控件了,不过还要添加上对方的ip address 和 port
我是想,在不知道对方的 ip和port的情况下,通过分析udp包来获得对方的ip
我设想了一下,想做一个多线程的程序,在每个端口等待信息,获得udp包后在
分析他,这样就可以获得所有发给我udp包的人的ip了吧,小弟初学网络编程对
很多方面还不是很熟,还请多多指教。
 
如果你的系统是WINDOWS98以上版本的话,可以用netstat -p udp -a来查看你的机器上的
UDP端口,只要在运行OICQ前与后比较一下就可以知道OICQ的端口号了!

要实现你的目的还是自己用WINSOCK写吧,先创建一个套接字,
SOCKET sk=socket(AF_INET,SOCK_DGRAM,0);
然后调用bind与本地端口号和地址绑定!最好用WSAAsyncSelect为套接字注册FD_READ的
消息,这样在有数据时就可以得到消息通知。
在接收数据时
sockaddr_in sock;
int socklen=sizeof(sock),BufferSize=1023;
char szBuffer[1024];
recvfrom(sk,szBuffer,BufferSize,(sockaddr*)&sock,&socklen);
这样sock结构就返回对方的IP,端口
 
我想 ice-sword 是想做一个 OICQ Sniffer 之类的程序!
 
>>bakubaku
不出老兄所料,oicq_sniffer我用过可是始终抓不到对方的ip,我是用的代理上网,
还有一个防火墙,不知道是不是这个原因才(抓不到对方的ip),所以想自己做个
程序,另外也可以熟悉一下网络编程的技术,
>>各位大虾
谁有相关的程序代码,可否给小弟参考参考,道个谢先:)
 
怎么会这样,我的分谁都没给成,我faint......
 

Similar threads

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