文章851
标签121
分类10

nmap / nc 端口扫描工具

要在 Ubuntu 上进行端口扫描,你可以使用一些常见的工具,如 NmapNetcat(nc)。这些工具可以帮助你扫描主机上开放的端口。

使用 Nmap 进行端口扫描:

首先,确保你已经安装了 Nmap。如果没有,请在终端中运行以下命令安装:

sudo apt update
sudo apt install nmap

如何在Linux Shell中读取WebSocket响应

如何在Linux Shell中读取WebSocket响应

curl 请求的方式 不在有效 经常抛错

curl 'wss://ws.test.com' -H 'Upgrade: websocket' -H 'Connection: Upgrade' --verbose
* Protocol "wss" not supported or disabled in libcurl
* Closing connection -1
curl: (1) Protocol "wss" not supported or disabled in libcurl

更换使用 wscat

npm install -g wscat
/usr/bin/wscat -> /usr/lib/node_modules/wscat/bin/wscat
npm WARN notsup Unsupported engine for commander@9.5.0: wanted: {"node":"^12.20.0 || >=14"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: commander@9.5.0
npm WARN notsup Unsupported engine for ws@8.16.0: wanted: {"node":">=10.0.0"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: ws@8.16.0

+ wscat@5.2.0
added 9 packages from 7 contributors in 1.264s

指令测试

wscat -c 'wss://ws.test.com'
Connected (press CTRL+C to quit)

起码可以测试下 websocket 是否握手成功

PHP Warning: simplexml_load_string(): Entity: line 6: parser error : Input is not proper UTF-8, indicate encoding

[13-Dec-2023 14:48:48 Asia/Shanghai] PHP Warning:  simplexml_load_string():                ^ in Library/Supervisor/Client.php on line 777
[13-Dec-2023 14:48:50 Asia/Shanghai] PHP Warning:  simplexml_load_string(): Entity: line 6: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xAA 0xE5 0xA4 0x84 in Library/Supervisor/Client.php on line 777
[13-Dec-2023 14:48:50 Asia/Shanghai] PHP Warning:  simplexml_load_string(): <value><string> Library/Supervisor/Client.php on line 777
[13-Dec-2023 14:48:50 Asia/Shanghai] PHP Warning:  simplexml_load_string():                ^ in Library/Supervisor/Client.php on line 777

上面这些抛错 , 简单描述下问题. 调用 Supervisor接口查看状态 , 需要读取 xml 数据, 之前有文章介绍过.
抛错告知存在不是 UTF-8格式的字符,

处理方案 , 强制转换格式即可

$xmlString = mb_convert_encoding($xmlString, 'UTF-8', 'UTF-8');

Mysql DDL语句、DML语句与DCL语句

MySQL---DDL语句、DML语句与DCL语句

MySQL是一种广泛使用的关系型数据库管理系统,它支持许多SQL语句来管理数据库和数据。在MySQL中,我们可以将SQL语句分为三类:DDL语句(数据定义语言)、DML语句(数据操作语言)和DCL语句(数据控制语言)。每种语句都有不同的功能和用途。在本文中,我们将详细介绍这三种类型的语句及其用法。

DDL语句

DDL语句(数据定义语言)用于定义数据库、表和其他数据库对象的结构。它们允许我们创建、修改和删除数据库对象。以下是一些常见的DDL语句:

  • CREATE:用于创建数据库或表。例如,CREATE DATABASE database_name;用于创建一个新的数据库,CREATE TABLE table_name (column1 datatype, column2 datatype);用于创建一个新的表。
  • ALTER:用于修改现有的数据库对象,如表或列。例如,ALTER TABLE table_name ADD column_name datatype;用于向表中添加一个新列。
  • DROP:用于删除数据库或表。例如,DROP DATABASE database_name;用于删除一个数据库,DROP TABLE table_name;用于删除一个表。
  • TRUNCATE:用于删除表中的所有数据,但保留表的结构。例如,TRUNCATE TABLE table_name;用于清空一个表。
  • RENAME:用于重命名数据库对象,如表或列。例如,ALTER TABLE table_name RENAME TO new_table_name;用于将表重命名为新的表名。

DDL语句对数据库的结构进行操作,但不涉及实际的数据操作。

DML语句

DML语句(数据操作语言)用于对数据库中的数据进行操作。它们允许我们插入、更新、删除和查询数据。以下是一些常见的DML语句:

  • INSERT:用于向表中插入新的数据行。例如,INSERT INTO table_name (column1, column2) VALUES (value1, value2);用于向表中插入一行数据。
  • UPDATE:用于更新表中的数据。例如,UPDATE table_name SET column_name = new_value WHERE condition;用于根据条件更新表中的数据。
  • DELETE:用于从表中删除数据。例如,DELETE FROM table_name WHERE condition;用于根据条件删除表中的数据。
  • SELECT:用于查询表中的数据。例如,SELECT column1, column2 FROM table_name WHERE condition;用于根据条件查询表中的数据。

DML语句用于对数据库中的数据进行操作,包括插入、更新、删除和查询。

DCL语句

DCL语句(数据控制语言)用于管理数据库用户的访问权限和安全性。它们允许我们授予或撤销用户的权限,并管理数据库的安全性。以下是一些常见的DCL语句:

  • GRANT:用于授予用户特定的权限。例如,GRANT SELECT, INSERT ON table_name TO user_name;用于将SELECT和INSERT权限授予特定用户。
  • REVOKE:用于撤销用户的权限。例如,REVOKE INSERT ON table_name FROM user_name;用于从特定用户撤销INSERT权限。
  • DENY:用于拒绝用户的权限。类似于REVOKE,但更加严格。一旦权限被拒绝,即使有其他授权,用户也无法执行特定操作。

DCL语句用于管理数据库用户的访问权限和安全性,确保数据的安全性和完整性。

总结起来,DDL语句用于定义数据库和表的结构,DML语句用于对数据库中的数据进行操作,而DCL语句用于管理用户的访问权限和安全性。熟悉和掌握这些语句的用法对于有效管理和操作MySQL数据库至关重要。希望本文能帮助你更好地理解和应用DDL、DML和DCL语句。

Swoole WARNING Worker_reactor_try_to_exit() (ERRNO 9101): worker exit timeout, forced termination

swoole 遇到一个定时器 tick 的问题

WARNING Worker_reactor_try_to_exit() (ERRNO 9101): worker exit timeout, forced termination

今天突然发下 swoole 报错了,后来找资料才发现原来是定时器的问题,大概是说定时器设置的时间大于进程退出的时间了

官方文档 :


worker exit timeout, forced to terminate

发现形如以下报错:

WARNING swWorker_reactor_try_to_exit (ERRNO 9012): worker exit timeout, forced to terminate
Copy to clipboardErrorCopied

表示在约定的时间 (max_wait_time 秒) 内此 Worker 没有退出,Swoole 底层强行终止此进程。

可使用如下代码进行复现:

use Swoole\Timer;

$server = new Swoole\Server('127.0.0.1', 9501);
$server->set(
    [
        'reload_async' => true,
        'max_wait_time' => 4,
    ]
);

$server->on('workerStart', function (Swoole\Server $server, int $wid) {
    if ($wid === 0) {
        Timer::tick(5000, function () {
            echo 'tick';
        });
        Timer::after(500, function () use ($server) {
            $server->shutdown();
        });
    }
});

$server->on('receive', function () {

});

$server->start();
">