我编写了一个简单的 Perl 服务器,它侦听 TCP 端口/套接字并接受连接。现在我想知道:
当想要实现基于地址的访问控制时,是否可以在接受连接之前检查请求连接的对等方的地址?
如果可能的话,我可以拒绝连接请求(我希望),而不是接受连接并立即再次关闭它。
我编写了一个简单的 Perl 服务器,它侦听 TCP 端口/套接字并接受连接。现在我想知道:
当想要实现基于地址的访问控制时,是否可以在接受连接之前检查请求连接的对等方的地址?
如果可能的话,我可以拒绝连接请求(我希望),而不是接受连接并立即再次关闭它。
我编写了一个程序来使用RTM_GETADDR
for family查询 Linux rtnetlink(7) 接口AF_INET
。解析响应我意识到响应的最大部分似乎是IFA_UNSPEC
长度为 88 字节的类型记录(其他部分的长度通常小于 8 字节)。
调试示例输出(仅针对一个接口):
DB<3> r
index 1, family 2, prefixlen 8
flags permanent
host
# len 8, type 1
address 127.0.0.1
# len 8, type 2
local 127.0.0.1
# len 7, type 3
label lo
# len 8, type 8
flags permanent
# len 20, type 6
cacheinfo: prefered forever, valid forever, cstamp 2.31, tstamp 2.31
# len 88, type 0
RT_Netlink::handle_response(lib/RT_Netlink.pm:361):
“len 88, type 0”是IFA_UNSPEC
响应中的一大块。
所以我想知道:那些未指定的块是什么,为什么它们会在响应中发送?
这是手册页所说的:
Attributes
rta_type value type description
─────────────────────────────────────────────────────────────
IFA_UNSPEC - unspecified.
IFA_ADDRESS raw protocol address interface address
IFA_LOCAL raw protocol address local address
IFA_LABEL asciiz string name of the interface
IFA_BROADCAST raw protocol address broadcast address.
IFA_ANYCAST raw protocol address anycast address
IFA_CACHEINFO struct ifa_cacheinfo Address information.
我在 SLES 方面遇到了一个严重的支持问题,但没有取得任何可衡量的进展(几个月以来)。所以我想自己看一下源代码;也许我可以发现问题。
(似乎在 Xen Hypervisor 中的 SLES15 SP2 和 SP3 之间添加了一个致命错误,导致由于 RAM 损坏而导致服务器频繁崩溃)
如我所见,您可以下载应该包含源代码的 DVD 映像,但这些映像与媒体一样古老。含义:您没有当前补丁的来源。
是否有一个公共 Git 存储库,我可以在其中检查从发布到发布或从补丁到补丁所做的更改?我不想下载 ISO 映像,解压缩它们,下载更多 RPM 源包并解压缩它们等,只是为了查看更改。
我看到商业模式在某种程度上反对这一点,但从支持的角度来看,这是至关重要的。
我想知道:使用宏包编写 UNIX 手册页man
有.SH
(节标题)和.SS
(子节)。但是,如果我想有“子小节”怎么办?
有这样的标准吗?我想我已经看到一些页面摆弄了字体大小(troff
至少).SS
,但我想知道是否真的有一些(准)标准。
在编写命令的手册页时,SYNOPSIS 包含:
.RB [ \-v
.IR version ]
不幸的是,在格式化 SYNOPSIS 时,“[-v”和“version]”之间有一个换行符。
我怎样才能避免这种情况?
根据多次要求,这里是一个较长的示例输入,因为缺乏想象力,以及显示问题的屏幕截图:
这是来源:
.TH FOOBAR-DEMO 8 2022-03-16 "Charlie Brown" "System Administration"
.\"
.SH NAME
foobar-demo \- demonstration of manual formatting
.\"
.SH SYNOPSIS
.na
.nr hy-mode-save \n[.hy]
.hy 0
.B foobar-demo123
.RB [ \-a
.IR match_spec ]
.RB [ \-\-resource-agent
.IR match_spec ]
.RB [ \-v
.IR version ]
.RB [ \-\-version
.IR version ]
.hy \n[hy-mode-save]
.ad b
.\"
.SH DESCRIPTION
The purpose of this page is none...
declare -a A
是在 bash 中创建一个空数组A
,还是只是设置一个属性以防A
以后分配?
考虑这段代码:
set -u
declare -a A
echo ${#A[*]}
echo ${A[*]}
A=()
echo ${#A[*]}
echo ${A[*]}
A=(1 2)
echo ${#A[*]}
echo ${A[*]}
预期的输出应该是什么?
在 Bash 4.3.48(1)bash: A: unbound variable
中查询declare
. 访问所有元素时,我也会收到该错误。我知道 Bash 的更高版本对此有所不同。我仍然想知道是否declare
实际定义了一个变量(为空)。
我写了一个 LSB 初始化脚本,它可以管理我的守护进程的多个实例:
rcfoo start
启动所有实例(在某个/etc
配置文件中找到),rcfoo stop
停止所有实例,rcfoo status
显示所有实例的状态,并rcfoo reload
重新加载使用更改的配置更新守护进程.
首先,我想知道如何检测要使用某些[email protected]
systemd 单元文件的实例。AFAIK 我必须指定所有实例,例如foo@A
,foo@B
等等。
其次,我的 LSB 脚本可以报告扩展状态,这意味着它可以显示是否reload
需要服务(我reload
实际上优化为只重新加载需要它的服务)。如何制作自定义状态报告?我认为脚本必须systemd-notify
用于自定义状态消息。
幸运的是,我对 LSB 脚本的最终扩展,即通过添加single <instance>
(如 in rcfoo start single A
)来操作单个实例,是 systemd 开箱即用的支持。
所以我的基本问题是第一个问题。
我正在尝试从 rsyslog 输出中过滤来自 cron 作业(systemd)的不需要的消息。但是 rsyslog 总是抱怨re_match()
. 我的过滤规则是:
if $programname == "systemd" and re_match($msg, '^Started [Ss]ession \d+ of user ntpmon\.$') then stop
我开始将正则表达式放在双引号中,并且 rsyslog 抱怨。然后我把正则表达式放在单引号中,rsyslog 仍然抱怨。
文档有点模糊:
re_match(expr, re)
returns 1, if expr matches re, 0 otherwise. Uses POSIX ERE.
我该如何修复它(过滤器,而不是文档)?