我在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());
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消