原始套接字收udp报文问题 5C

使用原始套接字接受udp数据包,但是由于没有监听对于的udp端口,内核返回一个icmp端口不可达的报文,是否可以禁止该报文?

udp

2个回答

端口都没监听,肯定是会出问题的,你想禁止这个报文,有什么意义,有问题当然要报出来了,如果不想有这个报文你别那样操作就是了。
建议你看看这个端口不可达的概念:
http://blog.chinaunix.net/uid-28458801-id-4990181.html

daiyinglang
siyelangshao 刚在粘贴错了,我使用原始套接字读取多个端口的udp数据报文,同时不希望出现icmp不可达报文。
大约一年之前 回复
daiyinglang
siyelangshao 如果函数满足下面的一种或者几种条件,则说明是不可重入的函数: 使用static数据结构 调用malloc或free 标准IO库中的函数,因为大部分的标准IO函数都使用了全局数据结构
大约一年之前 回复

我使用原始套接字读取多个端口的udp数据报文,同时不希望出现icmp不可达报文。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
原始套接字 原始套接字
原始套接字概述 原始套接字的创建 通过原始套接字发送数据 通过原始套接字接收数据
服务端原始套接字,收到UDP报文, 返回ICMP,并且发送了UDP报文,但对方收不到。
服务端原始套接字,收到UDP报文(源端口A,目的端口B), 返回ICMP(端口不可达),并且发送了UDP报文(源端口B,目的端口A),rnrn对方收到了ICMP报文, 但是收不到UDP报文。 rnrn请问各位CSDN大侠,rn1、 服务端收到了UDP报文,并且进行了处理, 为啥还会返回ICMP报文 ?rn2、客户端收不到服务端的UDP报文, 跟ICMP报文有没有关系?rnrn
原始套接字的问题
听有人说WINXP不支持原始套接字是不是真的,那2003呢,是不是以后的系统都不支持拉
原始套接字的问题?
我照着网上的文章写了一段原始套接字Sniffer方面的程序。运行时,在win98上提示在setsockopt那儿出错。但在windows XP上顺利通过,可在recv(Socket,Buff,BuffSize,0)这儿就一直没反应了。rn各位大侠,请解释一下怎么回事啊?rn#include rn#include rn#include rn#include rn#pragma comment(lib,"ws2_32.lib")rnrn#define BufferSize 65536rn#define PROTOCOL_STRING_ICMP_TXT "ICMP" rn#define PROTOCOL_STRING_TCP_TXT "TCP" rn#define PROTOCOL_STRING_UDP_TXT "UDP" rn#define PROTOCOL_STRING_UNKNOW_TXT "UNKNOW" rnrntypedef struct _TCPrnrnWORD SrcPort; //源端口rnWORD DestPort; //目的端口rnDWORD SeqNum; //序列号rnDWORD AckNum; //确认号rnBYTE DataOff; //TCP头长rnBYTE Flags; //标志(如URG、PSH等)rnWORD Window; //窗口大小rnWORD ChkSum; //校验和rnWORD UrgPtr; //紧急指针rnTCP;rnrntypedef TCP *LPTCP;rntypedef TCP UNALIGNED *ULPTCP;rnrntypedef struct _IPrnrnunionrnrnBYTE Version; //版本rnBYTE HdrLen; //首部长度rn;rnrnBYTE ServiceType; //服务类型rnWORD TotalLen; //总长度rnWORD ID; //标识rnrnunionrnrnWORD Flags; //标志rnWORD FragOff; //分段偏移rn;rnrnBYTE TimeToLive; //生存期rnBYTE Protocol; //协议rnWORD HdrChkSum; //头部校验和rnrnDWORD SrcAddr; //源地址rnDWORD DestAddr; //目的地址rnBYTE Option; //可选项rnIP;rnrntypedef IP *LPIP;rntypedef IP UNALIGNED *ULPIP;rnrnSOCKET Socket;rnSOCKADDR_IN addr_in;rnchar Buffer[BufferSize];rnTCP tcp;rnIP ip;rnrnint NetInit(); //网络初始化rnint DecodePacket(); //IP包的解码rnchar* GetProtocolTxt(int Protocol);rnrnint main()rnrnint ret;rnret=NetInit();rnif(ret!=0)rnreturn -1;rnprintf("Net initialized success!\n");rnrnret=DecodePacket();rnif(ret!=0)rnreturn -1;rnrnreturn 0;rnrnrnint NetInit()rnrnWSADATA wsaData;rnBOOL Flag=TRUE;rnchar LocalName[16];rnstruct hostent *pHost;rnDWORD dwValue=1;rnrnif(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) //检查winsock版本rnrnprintf("An error occured when WSAStartuping.....\n");rnreturn -1;rnrnrnSocket=socket(AF_INET,SOCK_RAW,IPPROTO_RAW); //建立原始套接字rnif(socket==INVALID_SOCKET)rnrnprintf("An error occured when setuping the socket.....\n");rnWSACleanup();rnreturn -1;rnrnrnif(setsockopt(Socket,IPPROTO_IP,IP_HDRINCL,(char *)&Flag,sizeof(Flag))==SOCKET_ERROR) //设置IP头操作rnrnprintf("An error occured when setsockopt.....\n");rnWSACleanup();rnreturn -1;rnrnrnif(gethostname((char *)LocalName,sizeof(LocalName)-1)==SOCKET_ERROR) //获取主机名rnrnprintf("An error occured when getting the hostname.....\n");rnWSACleanup();rnreturn -1;rnrnrnif((pHost=gethostbyname((char *)LocalName))==NULL) //获取主机IP地址rnrnprintf("An error occured when getting the IP address.....\n");rnWSACleanup();rnreturn -1;rnrnrnaddr_in.sin_family=AF_INET;rnaddr_in.sin_port=htons(57274);rnaddr_in.sin_addr=*(struct in_addr *)pHost->h_addr_list[0];rnrnif(bind(Socket,(struct sockaddr *)&addr_in,sizeof(addr_in))==SOCKET_ERROR) //把socket绑定到本地地址上rnrnprintf("An error occured when binding the socket.....\n");rnWSACleanup();rnreturn -1;rnrnrnif(ioctlsocket(Socket,SIO_RCVALL,&dwValue)!=0) //设置SOCK_RAW操作为SIO_RCVALL,接受所有数据包rnrnprintf("An error occured when ioctlsocket.....\n");rnWSACleanup();rnreturn -1;rnrnrnreturn 0;rnrnrnint DecodePacket()rnrnint ret;rnprintf("Enter decodepacket() .....\n");rnwhile(TRUE)rnrnprintf("Begin recv....\n");rnret=recv(Socket,Buffer,BufferSize,0);rnprintf("ret:%d\n",ret);rnif(ret>0)rnrnprintf("Begin decode....\n");rnip=*(IP *)Buffer;rntcp=*(TCP *)(Buffer+ip.HdrLen);rnrnprintf("***********************************************************\n");rnprintf("协议:%s\n",GetProtocolTxt(ip.Protocol));rnprintf("IP源地址:%s\n",inet_ntoa(*(struct in_addr *)&ip.SrcAddr));rnprintf("TCP源端口:%d\n",tcp.SrcPort);rnprintf("IP目的地址:%s\n",inet_ntoa(*(struct in_addr *)&ip.DestAddr));rnprintf("TCP目的端口:%d\n",tcp.DestPort);rnprintf("数据包总长度:%d\n",ntohs(ip.TotalLen));rnprintf("***********************************************************\n");rnrnrnreturn 0;rnrnrnchar* GetProtocolTxt(int Protocol)rnrnswitch(Protocol)rnrncase IPPROTO_ICMP:rnreturn PROTOCOL_STRING_ICMP_TXT;rncase IPPROTO_TCP:rnreturn PROTOCOL_STRING_TCP_TXT;rncase IPPROTO_UDP:rnreturn PROTOCOL_STRING_UDP_TXT; rndefault:rnreturn PROTOCOL_STRING_UNKNOW_TXT;rnrnrnrnrn
原始套接字的问题!
那位给说说为什么, 会出现原始套接字这种方式, windows网络编程中有句话“利用原始套接字,可以访问位于基层的传输协议” 这一句怎么理解!访问基层的传输协议是指什么协议! rnrnint sockfd(AF_INET,SOCK_RAW,protocol) rn可以创建一个原始套接字.根据协议的类型不同我们可以创建不同类型的原始套接字 比如:IPPROTO_ICMP,IPPROTO_TCP,IPPROTO_UDP等等rnrn是不是用原始套接字要自己填充包头等等工作! rn使用sendto的时候rnint sendto (rn SOCKET s, rn const char FAR * buf, rn int len, rn int flags, rn const struct sockaddr FAR * to, rn int tolen rn);rn其中buf是包括ip包头+(udp |tcp | icmp包头)的数据指针!rnrn
原始套接字的问题。
我用原始套接字写了个程序,并把网卡设为混杂模式,想接收网络上的所有数据,可是出了自己的机器发出和收到的数据,只能接到别的机器和网关通信的,还有别的机器进行广播和组播的数据,而且,奇怪的是,我可以接收到网络上所有的ICMP报文。rn请问为什么?rn原始套接字是工作在IP层还是链路层?
原始套接字的问题???
我建了一个IPPROTO_IP类型的原始套接字并bind到了我的机器上, rn目的是为了查看发到我的机器上的IP数据包,但是, rn无论我上QQ或是上论坛,都没有检测到IP数据包啊? rn这是为什么呢?rnrnvoid main()rnrn // 创建原始套节字rn SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);rnrn // 获取本地IP地址rn char szHostName[56];rn SOCKADDR_IN addr_in;rn struct hostent *pHost;rn gethostname(szHostName, 56);rn if((pHost = gethostbyname((char*)szHostName)) == NULL) rn return ;rnrn addr_in.sin_family = AF_INET;rn addr_in.sin_port = htons(0);rn// memcpy(&addr_in.sin_addr.S_un.S_addr, pHost->h_addr_list[0], pHost->h_length);rn addr_in.sin_addr.s_addr=*((unsigned long*)pHost->h_addr);rnrn printf(" Binding to interface : %s \n", ::inet_ntoa(addr_in.sin_addr));rn if(bind(sRaw, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR)rn return;rnrn // 开始接收封包rn char buff[1024];rn int nRet;rn while(TRUE)rn rn nRet = recv(sRaw, buff, 1024, 0);rn if(nRet > 0)rn rn DecodeIPPacket(buff);rn rn rn closesocket(sRaw);rn
c#winform做接口实现接受udp报文和发送UDP报文
1. 使用UDP 协议,RCU模块在UDP 3341端口接收外部软件发送过来的控制指令rn2. UDP报文数据部分格式:rnunion host2rcu_frame_type //主机到RCU数据结构rnrn unsigned char bytes[1600];rn structrn union rn rn unsigned char bytes[SYSTEM_HEADER_LEN];rn system_header_type header_data;rn system_header_union;rn union rn unsigned char bytes[DEVICE_HEADER_LEN];rn device_header_type device_data; rn device_header_union; rn union rn rn unsigned char bytes[1550];rn scene_ctrl_type scene_ctrl_cmd;rn data_union;rn st;rn;rnrn#define SYSTEM_HEADER_LEN 14rn//系统通信网络数据报文头协议,最长限定30字节,目前使用18字节rnstruct system_header_typern unsigned char reserved; //必须是0x00rn unsigned char frame_len; //帧总字节数,包括头部和数据rn char system_id[4]; //固定为”HMIS”rn unsigned char dest_devid; //目标设备,要求为0x00rn unsigned char src_devid; //源设备,要求为0x08rn unsigned short packet_id; //为0rn unsigned long project_id; //为0xffffffffrn;rnrn#define DEVICE_HEADER_LEN 8rn//设备头协议,最长限定20字节,目前使用10字节rnstruct device_header_typernrn unsigned char nodeaddr; //目标模块设备, 0是主控器,其它的模块按地址拨码开关 rn unsigned short cmdtype; //必须为0x60rn unsigned char askack; //必须为0x00rn unsigned char nbuild; //必须为0xffrn unsigned char nfloor; //必须为0xffrn unsigned char nroom; //必须为0xffrn unsigned char nunit; //必须为0xffrn;rnrnstruct scene_ctrl_typernrn unsigned char srcdev; //必须为0x41rn unsigned char srcnet; //必须为0xffrn unsigned char snumh; //场景命令代号(高字节)rn unsigned char snuml; //场景命令代号(低字节)rn unsigned char flag1; //必须为0x00rn unsigned char flag2; //必须为0x00rn unsigned char flag3; //必须为0x00rn;rnrn场景命令代号即功能号,外部软件将每个控制事件编成一个命令代号。rnrnrnUDP数据格式实例:rnByte0 Byte1 Byte2-5 Byte6 Byte7 Byte8-9 Byte10-13rnLEN 帧长度rn为0x1b =byte0rn=0x1b 系统标识码“HMIS”rnByte2:0x48rnByte3:0x4drnByte4:0x49rnByte5:0x53 目标设备号rn必须为0x00 源设备号rn必须为0x05 报文号rn为0x0000 工程号rn为0xffffffffrnrnByte14 Byte15-16 Byte17 Byte18-21 Byte22-26 (数据部分)rn目标模块rn必须为0xffrn 命令代号rnByte15:0x81rnByte16:0x01 ASKrn必须为0x01rn0x00无应答 目标主机编码rn必须为0xffffffff Byte22:0x00rnByte23:这个控制对应的通道号,计算方法((n-1)<<1)+srn N为 对应的通道号,s为按下抬起状态,例如对应为in2,则这个字节计算为((2-1)<<1)+1按下,抬起((2-1)<<1)+0rnByte24:0x01rnByte25:0x00rnByte26:0x00rnrn例子数据:rn1b 1b 48 4d 49 53 00 05 00 00 ff ff ff ff ff 81 01 01 ff ff ff ff 00 00 01 00 00rn
原始套接字
自己设计二层帧数据发送,通过pcap提供的方法
原始套接字 原始套接字的创建
原始套接字 这里有原始套接字的创建、使用等
UDP报文模拟
简单的UDP报文模拟发包工具 对于有些网络设备的测试还是很方便的。小巧好用 不占资源 功能简单
IP/TCP/UDP报文解析(3)UDP报文
本文主要介绍UDP协议报文格式,及一些该协议的使用
udp报文解包
各位大虾好,我这有个UDP协议,第一个字节是char型的,第二三个字节是short int型的。我使用的是recvfrom(sockSrv,recvBuf,1024,0,(SOCKADDR*)&addrClient,&len);把对方发过来的报文接收,存放到recvBuf,他应该用的是二进制发送的,我该怎么解包?也就是怎么取值,然后把二进制转换成char或者short int.谢谢
UDP报文广播
我想做一个UDP报文手播程序,要求是这样类似的功能:通过UDP的报文广播,可以搜索到网络中的某个设备.因为我看了好多的例子都是在发送端运行一个程序,然后在接收端再运行一个程序.如果我要实现这个搜索功能,那么就要在一台计算机上进行收发了,呵呵呵呵!刚刚接触VC.net好多不会,望热心人帮忙
IPv6 UDP报文,
IPv6报文,分析IPv6报文的格式、构成等。希望有帮助。本来不想要分的,拿出来有人需要就看一下
udp报文顺序
udp报文是无序的,比如发送发发送1,2,3接收方接收到的可能是3,2,1,如果是视频的报文,那可能出现倒序播放的情况,为什么平时的视频直播没有这种情况呢?
解析UDP报文???
已知我的电脑Processor缓存是按照小端存储数据的。rn在解析UDP数据包时,从缓冲区中获得的字节,各种方法都试了(ASCII,bigEndianUnicode,default,UTF32,UTF8等)转化为字符串时,是一堆乱码。rn请问是不是需要按照UDP报文结构一个字段一个字段的解析啊?rn
JAVA中原始套接字的问题
请各位高手在JAVA中如何才能得到原始套接字,如果得到了,就可以在网络上进行截取数据包,在JAVA中有一个类SocketImpl中但它的方法全部是抽象的,我到底该如何写呢???
头疼原始套接字问题
windows 原始套接字 自行构建ip头的情况下 怎么 指定网卡发送 包
linux下原始套接字打印问题
#include rn#include rn#include rn#include rn#include rn#include rn#define BUFFER_MAX 2048rnrnint main(int argc,char *argv[])rnrn int sock,nread,proto;rn char buff[BUFFER_MAX];rn char *ethheader,*ipheader;rnif((sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))) < 0)rn rn fprintf(stdout, "create socket error\n");rn exit(0);rn rnwhile(1)rn rn nread=recvfrom(sock,buff,2048,0,NULL,NULL);rn printf("the num of packets %d",nread);rn printf("whole pack %s",buff); //我想用这句打印出整个包的数据,为什么不行呢?rn rnreturn 0;rnrnrn谢谢哪位帮忙!rnrn
使用SOCK_RAW原始套接字的问题。
用法其一(来自windows网络编程技术13章)rnsockRaw = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP,rn NULL, 0,WSA_FLAG_OVERLAPPED);rnrn....rnint bwrote = sendto(sockRaw, icmp_data, datasize, 0, rn (SOCKADDR *)&dest, sizeof(dest));rnrn用法其二:rnSOCKET SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);rn...rnbind(SockRaw, (PSOCKADDR)&sa, sizeof(sa));rnWSAIoctl(SockRaw, SIO_RCVALL,&dwBufferInLen, sizeof(dwBufferInLen), rn &dwBufferLen, sizeof(dwBufferLen),&dwBytesReturned , NULL , NULL );rnrecv(SockRaw, RecvBuf, sizeof(RecvBuf), 0);rnrn这两种用法各自用于什么场合?rn第一种似乎是接收和发送icmp包,而第二种用来接收所有的IP包。。rnrn第一种用的是recvfrom(...)和sendto(...)rn第二种是recv(...),rn第二种用法是不是只能用于接收到达本地的IP包?可不可以用recvfrom(...)?可不可以send(...)?rn并且事先一定要用bind来绑定到本地地址?rn而第一种是不是只接收和发送icmp包?其他的包一概忽略?rn
原始套接字的FD_CLOSE消息问题
我想用原始套接字的同步模式,可是一旦调用WSAAsyncSelect就自动变成异步模式,而且还不能改回来,那我要如何确认套接字是否关闭(TCP)?
windows 下 原始套接字的问题
本人新手,谁能给个windows 下 原始套接字的例子程序,要求能接受到看到所有发送到网卡上的数据包,并可以看到数据包的以太网头,谢谢
关于原始套接字的问题
在win系统下。rn请问使用原始套接字 SOCK_RAW 进行网络监听,分析截获的数据包的IP首部,UDP首部,TCP首部,应该如何设置SOCKET()这个函数。。。rnrn还有就是如何将网卡设置为混杂模式。rnrn
关于原始套接字的使用问题
我使用 SOCKET s=WSASocket(AF_INET,SOCK_RAW,IPPROTO_UDP ,null,0,0);rn通过 IP_HDRINCL 选项我可以自己构造自己的UDP 包,rn我构造好udp 包发送后,使用这个SOCKET 句柄srn通过 recvfrom 函数能不能收到对方回应的数据包?rn如果每次构建的数据包的源端口都是随机的,比如我发了3个udp 数据包,源端口分别是rn5000 ,5001,5002 ,对方收到数据包后,分别也做了回应,rn我针对这个句柄能收到对方的回应的数据包吗?
关于原始套接字SOCK_RAW问题
这是一个关于嗅探的例子,使用原始套结字,并且将网卡置于混杂模式,在redhat linux 9下编译通过,可是执行的时候只能抓取发给本机ip的数据包,同时有许多源Ip和目的IP都是127.0.0.1的包,rn小弟百思不得其解,望高人指教,不胜感激rn#include rn#include rn#include rn#include rn#include rn#include rn#include rnrn#include rnstruct IPrnrn unsigned int ip_length:4; rn unsigned int ip_version:4; /*IP版本,Ipv4 */rn unsigned char ip_tos; /*服务类型*/rn unsigned short ip_total_length; /*IP数据包的总长度*/rn unsigned short ip_id; /*鉴定城*/rn unsigned short ip_flags; /*IP 标志 */rn unsigned char ip_ttl; /*IP 包的存活期*/rn unsigned char ip_protocol; /*IP 上层的协议*/rn unsigned short ip_cksum; /*IP头校验和*/rn unsigned int ip_source; /*源IP地址*/rn unsigned int ip_dest; /*目的IP地址*/rn;rnstruct tcp rn unsigned short tcp_source_port;/*定义TCP源端口*/rn unsigned short tcp_dest_port;/*TCP目的端口*/rn unsigned short tcp_seqno;/*TC P序列号*/rn unsigned int tcp_ackno;/*发送者期望的下一个序列号*/rn unsigned int tcp_res1:4,/*下面几个是TCP标志*/rn tcp_hlen:4,rn tcp_fin:1,rn tcp_syn:1,rn tcp_rst:1,rn tcp_psh:1,rn tcp_ack:1,rn tcp_urg:1,rn tcp_res2:2;rn unsigned short tcp_winsize;/*能接收的最大字节数*/rn unsigned short tcp_cksum;/* TCP校验和*/rn unsigned short tcp_urgent;/* 紧急事件标志*/rn ;rn #define INTERFACE "eth0" rn int Open_Raw_Socket(void); rn int Set_Promisc(char *interface, int sock); rnint main() rn rn struct in_addr addr;rn int sock, bytes_recieved, fromlen; rn char buffer[65535]; rn struct sockaddr_in from; rn struct IP*ip; rn struct tcp *tcp; rn sock = Open_Raw_Socket(); rn Set_Promisc(INTERFACE, sock); rn rnrnrn while(1) rn rn fromlen = sizeof from; rn bytes_recieved = recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddrrn*)&from, &fromlen); rnrn ip = (struct IP *)buffer; rn tcp = (struct tcp *)(buffer + (4*ip->ip_length)); rn/*See if this is a TCP packet*/ rn if(ip->ip_protocol == 6&&ip->ip_dest!=ip->ip_source) //如果是TcP包rn printf("\nBytes received ::: %5d\n",bytes_recieved); rn printf("Source address ::: %s\n",inet_ntoa(from.sin_addr)); rn printf("IP header length ::: %d\n",ip->ip_length); rn printf("Protocol ::: %d\n",ip->ip_protocol); rn printf("IP TTL ::: %d\n",ip->ip_ttl);rn printf("IP Server Type :::: %s\n",ip->ip_tos);rn addr.s_addr = ip->ip_dest;rn fprintf(stderr, "To : %15s\n", inet_ntoa(addr));//显示源地址rn addr.s_addr = ip->ip_source;rn fprintf(stderr, "From: %15s\n", inet_ntoa(addr));//显示目标地址rn printf("Source port ::: %d\n",ntohs(tcp->tcp_source_port)); rn printf("Dest port ::: %d\n",ntohs(tcp->tcp_dest_port)); rn rn rn rnint Open_Raw_Socket() rnint sock; rnif((sock = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) rn/*Then the socket was not created properly and must die*/ rnperror("The raw socket was not created"); rnexit(0); rn; rnreturn(sock); rn rnint Set_Promisc(char *interface, int sock ) //////////////rn struct ifreq ifr;rn strncpy(ifr.ifr_name, interface,strnlen(interface)+1);rn if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) rn /*Could not retrieve flags for the interface*/rn perror("Could not retrive flags for the interface");rn exit(0);rn rn printf("The interface is ::: %s\n", interface);rn perror("Retrieved flags from interface successfully");rn /*now that the flags have been retrieved*/rn /* set the flags to PROMISC */rn ifr.ifr_flags |= IFF_PROMISC;rn if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) rn /*Could not set the flags on the interface */rn perror("Could not set the PROMISC flag:");rn exit(0);rn rn printf("Setting interface ::: %s ::: to promisc", interface);rnrn return(0);rn rn
创建原始套接字的问题
下原这段代码创建一个原始套接字,但总出现10013错误,就说是我没有权限,可是我是Administrator呀,我的系统是Vista Ultimate,请大虾门指教!rnrn#include "winsock2.h"rn#pragma comment(lib,"Ws2_32");rn#include rnusing namespace std;rnrnvoid main()rnrn WSAData wsad;rn if(WSAStartup(0x0202,&wsad)!=0)rn rn cout<<"Start up error"<
请教原始套接字问题
我运行代码显示rnNo such devicern是下面这段代码输出来的,问题会在哪里呢?rn[code=C/C++]rnlen = sendto(sp, &ap, sizeof(ap), 0, (struct sockaddr*)&sl, sizeof(sl)); rnif(-1 == len) rn rn perror("");rn return 1;rnrn[/code]rn
原始套接字recvfrom的问题
我使用原始套接字开发了一个traceroute程序,在接收ICMP数据报的时候,recvfrom会接收到的ICMP报文中不仅有我想要的ICMP响应报文,还有其他的ICMP报文。rnrn比如, 我用windows的 tracert 命令测量路由的同时,我运行我自己写的traceroute程序,在我的程序中也会收到对应于windows tracert命令的ICMP响应报文。此外,我在不同的线程中调用我的traceroute程序,使之并行的运行,各个traceroute程序之间也会相互影响,收到的报文中有对应于其他的traceroute的ICMP响应报文。rnrn我怀疑原始套接字的 recvfrom 操作可能会接收任何ICMP报文,我的问题是,是否可以设置一下,使之只接收对应于自己这个raw socket发送的ICMP响应报文呢?rn
msys2原始套接字的问题
自己用原始套接字实现了ping命令。在Linux上测试通过了。但是放到msys2上,整个程序卡死在了recvfrom(),就算设置了接收超时也不管用。用抓包软件Wireshark抓取,发现ping的过程中没有抓到任何数据包,也就是说sendto()没有发出去,但是返回值却是84(0x54)。rn希望各位大牛能够帮忙分析一下。因为公司的原因,无法给大家提供代码,抱歉了。
请教高手原始套接字问题
请问,利用原始套接字SOCK_RAW,进行接收时,需要接收的udp数据包长度为2600,rn下面的这个语句为什么总是返回packetlen=1513呢rn...rnlistensock=::socket(PF_PACKET, SOCK_RAW,0);rn...rnpacketlen = recv(listensock, buf, 8192, 0);rn...
关于原始套接字的问题!
利用原始套结字进行网络传输UDP包。rn在接受端,如果采用sd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);则recv接受的缓冲区就是数据部分。我想自己对流数据进行判断,所以采用sd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);可是无法分清哪个是我发过来的UDP的包!请给个指点!谢谢!
QThread监听UDP报文实践
参考 线程参考 https://blog.csdn.net/jinhucheng/article/details/70371724 udp参考 https://blog.csdn.net/weixin_42216430/article/details/80780297 代码 #ifndef UDPRECEIVER_H #define UDPRECEIVER_H #include &amp;amp;amp;amp;lt;QObj...
如何转发本机UDP报文
监听到本机发送至IP1的UDP报文,把报文转发给IP2。rn如何可以做到?最好给点代码参考,呵呵~rn谢谢
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview