在 PHP 中发送 TCP 数据包
Send TCP packet in PHP
我尝试使用 php 将 TCP 打包数据发送到某个 ip,我使用下面的代码发送它:
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//$bind=socket_bind($socket,'tcp://94.232.171.102');
socket_connect($socket, 'xx.xx.xx.xx', 9001);
$buff='P[=11=][=11=][=11=]\e5Gf\b9\c6\acB\e7\b3*\ab[=11=]G2\nc\ba{\a9}\dab"\c31\ed\f7\fc\aeX\ab\r/\cef\bc?qM\b0\f4\a0\b1X\d0\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
但是,但是,它不起作用,也没有发送,当我使用某些 windows 应用程序(如 Packet Sender 进行该设置时,它可以正确发送数据包,为什么我不能从 [=17= 发送它] 在本地主机上
通过至少一些错误处理,您更有可能找到错误。
ini_set('display_errors', true); error_reporting(E_ALL); // <- for debugging purposes only
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ( !$socket ) {
$errno = socket_last_error();
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
if ( !socket_connect($socket, 'xx.xx.xx.xx', 9001) ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
$buff='P[=10=][=10=][=10=]\e5Gf\b9\c6\acB\e7\b3*\ab[=10=]G2\nc\ba{\a9}\dab"\c31\ed\f7\fc\aeX\ab\r/\cef\bc?qM\b0\f4\a0\b1X\d0\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
if ( FALSE===$sent ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
else if ( $length!==$sent ) {
$msg = sprintf('only %d of %d bytes sent', $length, $sent);
trigger_error($msg, E_USER_NOTICE);
}
我尝试使用 php 将 TCP 打包数据发送到某个 ip,我使用下面的代码发送它:
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//$bind=socket_bind($socket,'tcp://94.232.171.102');
socket_connect($socket, 'xx.xx.xx.xx', 9001);
$buff='P[=11=][=11=][=11=]\e5Gf\b9\c6\acB\e7\b3*\ab[=11=]G2\nc\ba{\a9}\dab"\c31\ed\f7\fc\aeX\ab\r/\cef\bc?qM\b0\f4\a0\b1X\d0\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
但是,但是,它不起作用,也没有发送,当我使用某些 windows 应用程序(如 Packet Sender 进行该设置时,它可以正确发送数据包,为什么我不能从 [=17= 发送它] 在本地主机上
通过至少一些错误处理,您更有可能找到错误。
ini_set('display_errors', true); error_reporting(E_ALL); // <- for debugging purposes only
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ( !$socket ) {
$errno = socket_last_error();
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
if ( !socket_connect($socket, 'xx.xx.xx.xx', 9001) ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
$buff='P[=10=][=10=][=10=]\e5Gf\b9\c6\acB\e7\b3*\ab[=10=]G2\nc\ba{\a9}\dab"\c31\ed\f7\fc\aeX\ab\r/\cef\bc?qM\b0\f4\a0\b1X\d0\df$|\de$\b4\f6m\a9\ff%Z\b4\d8\aa\da\bb';
$length = strlen($buff);
$sent = socket_write($socket, $buff, $length);
if ( FALSE===$sent ) {
$errno = socket_last_error($socket);
$error = sprintf('%s (%d)', socket_strerror($errno), $errno);
trigger_error($error, E_USER_ERROR);
}
else if ( $length!==$sent ) {
$msg = sprintf('only %d of %d bytes sent', $length, $sent);
trigger_error($msg, E_USER_NOTICE);
}