当前位置: 首页 > news >正文

苏州好的做网站的公司泰安房产网签最新情况

苏州好的做网站的公司,泰安房产网签最新情况,追求无我,济源网站建设一、说明1.1 标准组播解释通信分为单播、多播(即组播)、广播三种方式单播指发送者发送之后#xff0c;IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式#xff0c;比如你现在与web服务器通信就是单播形式广播指发送者发送之后#xff0c;IP数据包被路由器发给与其连…一、说明1.1 标准组播解释通信分为单播、多播(即组播)、广播三种方式单播指发送者发送之后IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式比如你现在与web服务器通信就是单播形式广播指发送者发送之后IP数据包被路由器发给与其连接的所有设备的通信形式组播指发送者发送之后IP数据包被路由器发往目的IP对应组播组名下所有主机的通信形式1.2 个人理解组播解释对于标准的组播解释说明似乎还算是清楚的但具体到技术就有很多问题。比如我将数据包发往一个组播地址这个组播地址对应一台物理设备吗如果不是一台物理设备那谁依据什么向哪些主机发送该数据包等等。结合各资料和自己测试的情况总结出了以下几点1) 编写发送程序组播数据包是且只是目的IP是组播保留地址的UDP数据包与正常UDP数据包的区别只是其目的IP是组播保留IP2) 发送数据包主机网卡在看到目的IP是组播保留IP后自动将目的mac地址改成组播mac地址然后向其各端口都发送出去3) 交换机交换机在接收到数据包之后通过目的mac地址认识到这是一个组播数据包修改源mac为自己mac、保持目的mac为组播mac不变向其各端口都发送出去(交换机对组播包的处理和广播包应该是一样的或者说对于交换机只有单播包和广播包)4) 路由器路由器在接收到数据包之后通过目的mac地址或目的ip地址认识到这是一个组播数据包修改源mac为自己mac、保持目的mac为组播mac不变保持源IP不变、保持目的IP为组播保留IP不变依照与路由表类似的“组播组地址表”向与目的IP匹配的一个或多端口将数据包发送出去5) 接收数据包主机接收数据包主机要想接收到发送主机发送的数据包首先他要(向路由器说明)加入发送者发往的组播组然后他要在本地启动一个进程监听发送者发往的端口6) 组播需要硬件支持有些路由器是不支持组播的就直观感受看如果在全球实现组播那维护“组播组地址表”会给路由器带来很大负担路由大厂商应该也不是很愿意支持组播也就是说理论上组播可以在广域网上实现但其实一般只在局域网中(能够)使用。7)  注意从本质上而言接收组播数据包的主机只是启了一个UDP监听他本身并不能识别是组播发过来的数据包还是直接发过来的数据包(除非对收到的数据包的目的IP是否为组播IP进行判断但获取目的IP是件很麻烦的事)。也就是说该监听不只是可以接收组播数据包任何其他如果主机直接向该监听的端口发送UDP数据包该主机也是可以接收到的(已确认过)。假设使用组播地址为239.255.255.252使用组播端口为23456通信举例如下发送者S----发送者向239.255.255.252:23456发送一个UDP数据包Packet1接收者R1(假设其IP地址为134.192.1.100)----第一步启动进程监听239.255.255.252:23456第二步通过setsockopt加入组播组(239.255.255.252)接收者R2(假设其IP地址为134.192.1.101)----第一步启动进程监听239.255.255.252:23456第二步通过setsockopt加入组播组(239.255.255.252)最终效果----发送者发往239.255.255.252:23456的udp数据包R1的23456端口收到一份Packet1R2的23456端口收到一份Packet11.3 谁是服务端引发的混乱我在前面一直使用“发送者”、“接收者”而没有使用“服务端”、“客户端”因为“服务端”和“客户端”在组播中容易引发混乱。在我们一般的socket编程中都是服务端去bind但在组播中是反过来客户端(接收者)去bind而发送者(服务端)是不用去bind的(注意是不用而不是不能你非要bind也是可以的bind和不bind只是使用固定端口还是使用随机端口的区别)。有些小伙伴意识到了这个问题为了与习惯一致所以直接将发送者称为客户端接收者称为服务端。其实这种叫法是不合适的以初高中常见的电脑课场景为例老师控制所有电脑显示老师的电脑操作这时作为发送者的老师电脑从认知上确实应该是服务端而不是客户端才对。如果你读了半天没听懂这里在说什么那不必在意记得组播中尽里使用“发送者”和“接收者”少用“服务端”和“客户端”就对了。1.4 监听组播地址与监听本地地址的区别讨论在一般的关于组播的文章中接收者设置的监听地址都是本地地址(如134.192.1.100:23456)但在前面1.2中我们要求接收者R1和R2监听的不是本地地址而是组播地址239.255.255.252:23456。这是为什么呢首先说这两种监听形式都可以接收到发往239.255.255.252:23456的组播数据包。他们之间的区别是监听239.255.255.252:23456地址能且只能接收发往239.255.255.252:23456的数据包而监听134.192.1.100:23456除了能接收发往239.255.255.252:23456的数据包外还能接收直接发往134.192.1.100:23456的数据包。这样造成的安全区别是假如接收者实现了这么一项功能接收到一个打开telnet的命令就直接开启本机的telnet服务。如果监听的是239.255.255.252:23456那么攻击者只有通过局域网内主机发出组播数据包才能打开telnet但如果监听的是134.192.1.100:23456那么攻击者可以远程直接向134.192.1.100:23456发送数据包开启telnet。linux上可以通过SO_BINDTODEVICE选项绑定网卡然后设置监听组播地址但Windows没有实现SO_BINDTODEVICE暂时也不知道如何实现类似功能所以在下边代码中我也只是linux系统设置了监听组播地址其他系统仍只是监听本地地址。二、程序实现2.1 程序代码发送者代码importtimeimportsocket#组播组IP和端口mcast_group_ip 239.255.255.252mcast_group_port 23456defsender():#建立发送socket和正常UDP数据包没区别send_sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)#每十秒发送一遍消息whileTrue:message this message send via mcast !#发送写法和正常UDP数据包的还是完全没区别#猜测只可能是网卡自己在识别到目的ip是组播地址后自动将目的mac地址设为多播mac地址send_sock.sendto(message.encode(), (mcast_group_ip, mcast_group_port))print(f{time.strftime(%Y-%m-%d %H:%M:%S, time.localtime())}: message send finish)time.sleep(10)if __name__ __main__:sender()接收者代码importsysimportstructimporttimeimportsocket#linux能绑定网卡这里绑定组播IP地址不会服错windows没法绑定网卡这里不能绑定组播IP地址只能绑定本网卡IP地址if linux insys.platform:#绑定到的网卡名如果自己的不是eth0则注意修改nic_name eth0#监听的组播地址mcast_group_ip 239.255.255.252else:mcast_group_ipsocket.gethostbyname(socket.gethostname())mcast_group_port 23456defreceiver():#建立接收socket和正常UDP数据包没区别sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)#25是linux上的socket.SO_BINDTODEVICE的宏定义但由于windows没实现SO_BINDTODEVICE所以python索性也就没有实现SO_BINDTODEVICE我们直接使用25#windows没有实现SO_BINDTODEVICE所以不能通过这种方式绑定网卡windows怎么实现绑定网卡暂不清楚if linux insys.platform:sock.setsockopt(socket.SOL_SOCKET,25, nic_name)#linux能绑定网卡这里绑定组播IP地址不会服错windows没法绑定网卡这里不能绑定组播IP地址只能绑定本网卡IP地址sock.bind((mcast_group_ip, mcast_group_port))#加入组播组mreq struct.pack(4sl, socket.inet_aton(mcast_group_ip), socket.INADDR_ANY)sock.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)#允许端口复用看到很多教程都有没想清楚意义是什么我这里直接注释掉#sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#设置非阻塞看到很多教程都有也没想清楚有什么用我这里直接注释掉#sock.setblocking(0)whileTrue:try:message, addr sock.recvfrom(1024)print(f{time.strftime(%Y-%m-%d %H:%M:%S, time.localtime())}: Receive data from {addr}: {message.decode()})except:print(while receive message error occur)if __name__ __main__:receiver()2.2 运行截图发送者截图接收者运行截图参考
http://wiki.neutronadmin.com/news/187644/

相关文章:

  • 西安营销型网站网站建设开放的端口
  • linux 配置网站域名简单网页源代码
  • 竹中建设官方网站wordpress 注册验证码
  • 手机网站快速排名 软件网上做ps赚钱的网站
  • 网站的着陆页做网站和做网页的区别
  • 网站建设往年的高考题查看网站主机
  • 有什么公司建网站如何做微信小程序网站
  • 企业门户网站平台建设招标采购文件网站建设推广群
  • 网站开发与维护项目招标站长工具流量统计
  • 网站空间可以通过什么获取网站的seo
  • 武义做网站广州市网站建设企业
  • 黑龙江恒泰建设集团网站人力外包
  • 2015年全球网站优秀设计师最专业的外贸网站建设公司
  • 做公司网站解析网站开发与设计教程pdf
  • 项目四网站建设内容Python爬取wordpress
  • 上海专业做网站公司电话公司网站建设规划方案
  • 做的网站在ie会乱码成都住建局官网住建蓉e办
  • 网站开发需要申请专利吗娄底网站建设工作室
  • 用帝国cms做网站电脑上无法安装wordpress
  • 深圳市深圳市住房和建设局网站哈尔滨建站哪个好
  • 增长超人做网站多少钱各网站收录
  • 运城市网站建设网站后台的作用
  • 湖北省住房和城乡建设厅网站的公示公告网站被k
  • 长春网站优化实战铜川市新区建设局网站
  • 在线音乐网站开发教程济宁网站建设神华
  • 股票交易平台app排行榜seo综合查询可以关了吗
  • 德国服务器网站搭建一个商城需要多少钱
  • 建设中的网站备案期间做什济南教育加盟网站建设
  • 视频网站建设难吗前端开发岗位职责
  • seo实训总结seo外链网站