添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我有这个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;
    if (!socket_bind($socket, '11.11.11.11', 1024)) {
        echo 'Unable to bind socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
    $rval = socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR);
    if ($rval === false) {
        echo 'Unable to get socket option: '. socket_strerror(socket_last_error()) . PHP_EOL;
    } else if ($rval !== 0) {
        echo 'SO_REUSEADDR is set on socket !' . PHP_EOL;
    $len = strlen(LOGIN_TEMPLATE); // how to insert login e password ??
    $sendMsg = socket_send($socket, LOGIN_TEMPLATE, $len, MSG_DONTROUTE);// how to insert login e password ??
    $buf = '';
    if (false !== ($bytes = socket_recv($socket, $buf, 128, MSG_WAITALL))) {
        echo "Read $bytes bytes from socket_recv(). Closing socket...";
    } else {
        echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";

我试图了解如何生成LOGIN_TEMPLATE。 但我不明白如何解释Python代码如何生成它。谁能帮助我理解如何创建它?

原始的python脚本在这里。 https://gitlab.com/camshift/dahua-scanner/blob/master/utils/dahua.py

php
python
sockets
Simone ToNe Ceschi
Simone ToNe Ceschi
发布于 2020-01-16
1 个回答
Armali
Armali
发布于 2020-01-16
已采纳
0 人赞同
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');

write

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");
  • double quoted to get the escape sequences expanded
  • Python's conversion specifier %b replaced as appropriate
  •