Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有协议(IP/UDP/TCP…)的情况下使用Php发送以太网帧_Php - Fatal编程技术网

如何在没有协议(IP/UDP/TCP…)的情况下使用Php发送以太网帧

如何在没有协议(IP/UDP/TCP…)的情况下使用Php发送以太网帧,php,Php,我正在使用一个PHP服务器来管理一个由计算机和设备组成的平台 但是一个新的设备没有在MAC层之上实现协议层。 最后,我将使用自定义格式与它进行通信。这是: MAC报头-46原始数据-MAC CRC 我想插座是个好主意,但我不明白怎么做? 以下是我的功能: <?php function request_data($str) { $create=socket_create(AF_INET,SOCK_RAW,1); $send=socket_send($create,$str,s

我正在使用一个PHP服务器来管理一个由计算机和设备组成的平台

但是一个新的设备没有在MAC层之上实现协议层。 最后,我将使用自定义格式与它进行通信。这是: MAC报头-46原始数据-MAC CRC

我想插座是个好主意,但我不明白怎么做? 以下是我的功能:

<?php
function request_data($str)
{
    $create=socket_create(AF_INET,SOCK_RAW,1);
    $send=socket_send($create,$str,strlen($str),0);
    socket_close($create);
}
?>


您能帮助我吗?

AF\u INET已经声明这是使用IP协议的,所以您不能访问MAC协议字段。
您的以太网设备可能已经有一个库来发送您需要使用的原始数据包。如果没有,您将无法从PHP发送原始数据包,这要感谢all的解释

事实上,我在寻找另一种解决方案,并找到了一种无协议发送/接收某些帧的方法: 在c/c++中,一个名为“libpcap”的库就是为这种东西设计的。 使用“”,可以提取一些函数(带有一个接口文件以进行调整)并生成php扩展(*.so)。 在web上查找“”。他发表了一篇文章,举了一个例子。 我几乎已经在我的配置上验证了这个解决方案:apache2和Ubuntu 14.04 64位上的php5

但是,我还有最后一个“linux”权限问题。 我不能执行以下命令

$ php -c php.ini inject.php eth0 "" 4096 10000 myRawPacketData.raw
-php.ini包含扩展名所在的链接, -php包含使用libpcap函数的脚本 -eth0(参数1)是我的计算机上的接口 -“”(参数2)是一个筛选器 -4096(参数3)是长度 -10000(参数4)是超时 -myRawPacketData.raw(参数5)包含要发送的数据

我有以下错误:

what():无法打开设备:eth0:eth0:您没有在该设备上捕获的权限(套接字:不允许操作)放弃 (堆芯倾倒)

但a可以做到:

$ **sudo** php -c php.ini inject.php eth0 "" 4096 10000 myRawPacketData.raw
它在我的界面上发送一个帧(由wireshark确认)。 作为参考,我执行了此命令,因为在wireshark中eth0不可用:

sudo chmod 4711 'sudo which dumpcap'

您能否帮助我在不使用sudo命令的情况下对apache2(或WW数据)进行身份验证以访问eth0,因为目前我无法在控制台外使用inject.php脚本(这不是我的目标)?

据我所知,协议是联网设备与网络上其他设备通信的基本要求。我相信你的建议是不可能的。如果远程设备不支持TCP/IPThanks作为你的答案,你需要的不仅仅是PHP代码。我知道以C语言为例的pcap库管理这种函数。我认为PHP的原始数据意味着“没有协议”。SOCK_RAW将使用IP(但上面没有TCP或UDP)