2 skaitiaozhan skaitiaozhan 于 2016.09.07 10:06 提问

关于原始套接字socket初始化失败 10C

socket(AF_INET,SOCK_RAW,protocol);
其中protocol设置为ICMP、TCP等等时可以成功创建,但是设置为IP包则失败,返回-1.
在root用户下创建的程序,网卡也设置为混杂模式,找不到错误,求大神指导。

1个回答

u010136832
u010136832   2016.11.01 11:14

1.socket(AF_INET, SOCK_RAW, IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包
2.socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧
3.socket(AF_PACKET, SOCK_DGRAM, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧(不包括以太网头部)_

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
原始套接字的初始化及收发流程分析
这篇文章写的很棒http://biancheng.dnbcw.info/linux/430376.html
win7中无法创建原始套接字解决方法
VS2012中: #pragma comment(lib,"Ws2_32.lib") #include #include //创建原始套接字 m_s=socket(AF_INET,SOCK_RAW,IPPROTO_IP); 由于SOCK_RAW要管理员权限,在win7系统中, 无法创建成功,以管理员方式运行也不行. 解决方法:用管理员权限启动VS2012
Windows7旗舰版和10 创建原始套接字失败,代码10013
笔记本重装系统后,以前能运行的程序中的Ping程序不能运行了。查看代码,创建套接字失败。 RawSock = socket ( AF_INET, SOCK_RAW, IPPROTO_ICMP ) ; RawSock==INVALID_SOCKET 用DWORD dwError=WSAGetLastError();查看错误代码为10013. 网上查了一下,说是权限被拒绝。以一
原始套接字(raw socket)
1.原始套接字(raw socket)   1.1 原始套接字工作原理与规则          原始套接字是一个特殊的套接字类型,它的创建方式跟TCP/UDP创建方法几乎是 一摸一样,例如,通过 CODE: [Copy to clipboard]        int sockfd;        sockfd = socktet(AF_INET, SOCK_
Linux下使用RAW SOCKET原始套接字构造UDP原始数据帧广播到局域网,在局域网的另一台计算机上显示UDP发送的信息
因为使用IEC61850需要直接访问以太网数据链路层
Windows下通过使用RAW原始套接字进行抓包
// 注意:原始套接字只在系统管理员权限下起作用,其它情况下socket创建失败,所以开发时首先以管理员权限启动VS SOCKET nAnniSock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);  // 指定为原始套接字(IP层抓取) // 设置IP_HDRINCL选项,以便自己构造(解析)IP头部 BOOL bRaw = TRUE;
Win8.1系统“Windows 套接字初始化失败”解决方案
【前言】       那是一个炎热夏日的午后,打开电脑,本来就没睡醒的我,更懵了。       上来就是个窗口: Windows 通信端口初始化失败。       电脑管家说:登录组件错误【4】,请重新启动电脑管家。       QQ程序没起来,报错:Initialization failure。(初始化失败的意思)       邮件服务器说:Windows sockets 初始化失
链路层原始套接字编程-总结
1、链路层原始套接字创建方法:socket(PF_PACKET, SOCK_RAW, htons(protocol)),其中protocal参数为关心的协议类型。 2、默认情况下网卡只处理目的地址是本机网卡地址的包,可通过设置混杂模式,使网卡将收到的所有包(包括组播和广播)都转发给操作系统。代码如下:     struct ifreq    ifr;     strcpy(ifr.ifr_n
Linux C raw_socket (原始套接字)
我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。 通过原始套接字,我们可以抓取所有发送到本机的IP包(包括IP头和TCP/UDP/ICMP包头),也可以抓取所有本机收到的帧(包括数据链路层协议头)。普通的套接字无法
Linux原始套接字学习总结
Linux网络编程:原始套接字的魔力【上】 http://blog.chinaunix.net/uid-23069658-id-3280895.html 基于原始套接字编程        在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证:        也就是说,对于TCP或UDP的程序开发,焦点在