从套接字句柄获取客户端ip:port

网络通信开发中,如果服务端想获取客户端ip,如果是tcp套接字,用getpeername函数(用法网上很多)。如果是udp套接字,只能从recvfrom函数的第三个参数struct sockaddr*中返回。
最近犯的一个低级错误,想用getpeername获取udp客户端ip,获取出来的始终不对
打印:
client ip =39.127.0.0, port=55569
因为这个函数根本就没执行成功,不能用于udp套接字,只能用于面向连接的tcp套接字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本文章将介绍如何使用RawSocket(原始套字)开发网络嗅探器: 首先我们得了解什么是套字,这个我就不多说,自己百度,百度百科比我说的好。 那么什么又是原始套字呢,常用的套字分为 SOCK_STREAM(流套字) 用于TCPXY通讯。 SOCK_DGRAM(数据报套字) 同于UDPXY通讯。 那么原始呢,他则是和名字一样原始套字;举例:要想用流套字进行一次TCP的发包,那么直上对方服务器然后用Send就可以发送指定的内容,但其实发送的数据并不止你的那些内容,有一些东西是流套字会给你自动补上的。TCP是属于IPXY的一个子XY,那么要发送一个TCP数据包就得加上(以太网XY报头这个先不提),IPXY的报头,和TCPXY报头,这些东西流套字都会帮你处理,而原始套字则不会(当然也可以设置让原始套字构造IP报头)。原始套字他有更多的用途,但相对来说也比流套字或数据报套字麻烦。 原始套字还可以设置成允许收本地所有的套字数据。那么我们就利用这个功能来做嗅探器! 首先:1.使用  WSAStartup (合并短整数 (2, 2), WSADATA)  来初始化Winsocket服务 其参数有2个  第一个 (短整数型/双字节型):wVersionRequired  这个参数表明使用的winsock版本号,高位指定修订版本号,低位指定主版本号。第二个参数 WSADATA类型 用于收Winsocket细节东西,咱不用管它。 //下面就不说那么详细了,源码里面全是注释,自己看。 2.然后使用socket (#AF_INET, #SOCK_RAW, #IPPROTO_IP)  来创建一个套字   第一个参数应该是表明Internet地址格式反正只能固定这个,仅仅支持这个  参数2:表明要创建的是一个原始套字,参数3:指定IPXY  IPXY包括其子XY TCP UDP 等。成功返回套字句 3.  bind (s, addr, sizeof (addr))  将套字绑定至指定网卡,参数1=套字句    参数2为一个addr结构的值,该值表明要绑定的网卡IP口号 4.  ioctlsocket (Socket, 2550136833, 1) 将套字的模式改变为允许收所有数据 顺利完成上面的操作后咱就可以用Recv来收数据包了,只要不断的调用Recv就OK。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44764006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值