gpt4 book ai didi

python - 如何向 IGMP 设备发送 UDP 数据报?

转载 作者:行者123 更新时间:2023-11-30 16:15:49 27 4
gpt4 key购买 nike

我有一个宽带雷达,我想打开。要打开它,我必须发送两个寄存器,如下所示:

    int reg0[3] = {0x00, 0xC1, 0x01};      
int reg1[3] = {0x01, 0xC1, 0x01};

主要问题是我的雷达设备工作在 UDP 协议(protocol)上并工作在 IGMP(ISO 模型的第三层)下。我从 IBM 支持人员那里读到了很多关于在这些站点中发送 UDP 的内容: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.hala001/cskudp.htm https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxbd00/setopt.htm...以及其他。

我认为它既没有义务创建struct ip_mreq,也没有义务使用setsockopt()添加选项,因为我只想发送数据报。

我已经尝试过做这类事情:

    #define IPM struct ip_mreq
IPM mcast;
int sock_err = bind(skemit, (SA *) &emit, lemit);
mcast.imr_multiaddr.s_addr = MCAST_JOIN_GROUP;//multicastaddress
mcast.imr_interface.s_addr = add1;
setsockopt(semit, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mcast, sizeof(IPM)); //sizeof(mcast)

这是我的代码:

#include <stdlib.h>

#include <unistd.h>
#include <stdio.h>
#include <string.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <signal.h>

#define SAI struct sockaddr_in
#define SA struct sockaddr

int main(){

SAI emit;
uint32_t add1 = htonl(inet_addr("236.6.7.10")); //host address
unsigned short port = htons(6680); // port

memset(&emit, '\0', sizeof(emit));
emit.sin_family = AF_INET;
emit.sin_port = port;
emit.sin_addr.s_addr = add1;
socklen_t lemit = sizeof(SAI);

int skemit = socket(AF_INET, SOCK_DGRAM, 0);
if (skemit == -1){ perror("creating socket"); }
/*
* Send a message to the multicast address specified by the
* emit sockaddr structure.
*/

int reg0[3] = {0x00, 0xC1, 0x01}; //turn_on
int reg1[3] = {0x01, 0xC1, 0x01}; //turn_on


/* Send the message in reg0 and reg1 to the server */

if (sendto(skemit, reg0, sizeof(reg0), 0, (SA*)&emit, lemit) < 0){perror("sending datagram message reg0");}
if (sendto(skemit, reg1, sizeof(reg1), 0, (SA*)&emit, lemit) < 0){perror("sending datagram message reg1");}
}

我收到此错误:

sending datagram message reg0: Network is unreachable
sending datagram message reg1: Network is unreachable

你能帮我吗?

最佳答案

我已经解决了我的问题,这就是为什么我想部分回答:我设法在 python 中进行连接。不可能是电脑设置问题。

这是有效的代码:

import socket
import struct

MCAST_GRP = '236.6.7.8'
MCAST_PORT = 6678

HOST2 = '236.6.7.10'
PORT2 = 6680

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)



sock.bind(('', MCAST_PORT)) # use MCAST_GRP instead of '' to listen only
# to MCAST_GRP, not all groups on MCAST_PORT


mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

sock2 = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

reg0=bytes([0x00, 0xC1, 0x01]) #turn_on
reg1=bytes([0x01, 0xC1, 0x01]) #turn_on


sock2.sendto(reg0, (HOST2, PORT2))
sock2.sendto(reg1, (HOST2, PORT2))
sock2.sendto(reg3, (HOST2, PORT2))
pcapfile = open('ragar.txt', 'w')
while True:
pcapfile.write(str(sock.recv(65536)))
pcapfile.close()
print('the end')

sock2 设法将寄存器发送到设备,而 sock 正确接收数据。

关于python - 如何向 IGMP 设备发送 UDP 数据报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com