为了账号安全,请及时绑定邮箱和手机立即绑定

Python 到 PHP 转换套接字连接

Python 到 PHP 转换套接字连接

PHP
扬帆大鱼 2022-08-05 09:30:17
我在python中有这个脚本:LOGIN_TEMPLATE = b'\xa0\x00\x00\x60%b\x00\x00\x00%b%b%b%b\x04\x01\x00\x00\x00\x00\xa1\xaa%b&&%b\x00Random:%b\r\n\r\n'GET_SERIAL = b'\xa4\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \             b'\x00\x00\x00\x00\x00\x00\x00'GET_CHANNELS = b'\xa8\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \               b'\x00\x00\x00\x00\x00\x00\x00\x00'GET_SNAPSHOT = b'\x11\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \               b'\x00\x00\x00\n\x00\x00\x00%b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \               b'\x00\x00%b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'TIMEOUT = 10  self.serial = ''        self.channels_count = -1        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self.socket.settimeout(TIMEOUT)        self.socket.connect((ip, port))        self.socket.send(LOGIN_TEMPLATE % (struct.pack('b', 24 + len(login) + len(password)), login.encode('ascii'),                                           (8 - len(login)) * b'\x00', password.encode('ascii'),                                           (8 - len(password)) * b'\x00', login.encode('ascii'),                                           password.encode('ascii'), str(int(time.time())).encode('ascii')))        data = self.socket.recv(128)有一种方法可以在php中转换?我创建了一个我尝试的例子。$login = 'admin';$password ='admin';$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);    define('LOGIN_TEMPLATE', '\xa0\x00\x00\x60%b\x00\x00\x00%b%b%b%b\x04\x01\x00\x00\x00\x00\xa1\xaa%b&&%b\x00Random:%b\r\n\r\n');    if (!is_resource($socket)) {        echo 'Unable to create socket: '. socket_strerror(socket_last_error()) . PHP_EOL;    }我试图了解如何生成LOGIN_TEMPLATE。但是我不明白如何解释Python代码如何生成它。任何人都可以帮助我了解如何创建它吗?原始的python脚本在这里:https://gitlab.com/camshift/dahua-scanner/blob/master/utils/dahua.py
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

而不是

define('LOGIN_TEMPLATE', '\xa0\x00\x00\x60%b\x00\x00\x00%b%b%b%b\x04\x01\x00\x00\x00\x00\xa1\xaa%b&&%b\x00Random:%b\r\n\r\n');

define('LOGIN_TEMPLATE', "\xa0\x00\x00\x60%c\x00\x00\x00%-'\x008s%-'\x008s\x04\x01\x00\x00\x00\x00\xa1\xaa%s&&%s\x00Random:%d\r\n\r\n");
  • 双引号以扩展转义序列

  • Python 的转换说明符 %b 根据需要替换

这只是一个需要扩展为具体登录数据包的模板,让我们分别将其命名为 ,登录名和密码分别为:$LOGIN$login$password

$LOGIN = sprintf(LOGIN_TEMPLATE, 24 + strlen($login) + strlen($password)
                               , $login, $password, $login, $password, time());


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信