局域网跨网段发现目标主机ip的组播方案

组播方案在路由器不支持的情况下也无法穿透路由,需要考虑其他方案,目前除了单点遍历查询外还没找到其他办法。

设备上实现组播监听

#coding:utf-8,
from socket import *
import time

def start_listen():
	ANY = '0.0.0.0'
	MCAST_ADDR = '224.168.2.9'
	MCAST_PORT = 1600 

	sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) #创建UDP socket
	sock.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #允许端口复用 
	sock.bind((ANY,MCAST_PORT)) #绑定监听多播数据包的端口
	sock.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, 255) #告诉内核这是一个多播类型的socket
	status = sock.setsockopt(IPPROTO_IP,  #告诉内核把自己加入指定的多播组,组地址由第三个参数指定
	IP_ADD_MEMBERSHIP, 
	inet_aton(MCAST_ADDR) + inet_aton(ANY));

	#sock.setblocking(0) 
	ts = time.time() 
	while 1: 
		try: 
			data, addr = sock.recvfrom(1024)
			print("recv:",data,addr)
		except error: 
			print("error ",error)

start_listen()

windows客户端加入组播并发送组播消息

#coding:utf-8,
from socket import *
import time

ANY = '0.0.0.0'
SENDERPORT=1501 
MCAST_ADDR = '224.168.2.9'
MCAST_PORT = 1600

sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) 
#sock.bind((ANY,SENDERPORT)) #绑定发送端口到SENDERPORT,即此例的发送端口为1501
sock.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, 255) #设置使用多播发送
while 1: 
    time.sleep(1)
    sock.sendto('Hello World'.encode("utf8"), (MCAST_ADDR,MCAST_PORT) );
    #将'hello world'发送到多播地址的指定端口,属于这个多播组的成员都可以收
到这个信息   
posted on 2022-04-14 15:38  DuoRuaiMi4567  阅读(544)  评论(0编辑  收藏  举报