小编Mar*_*tin的帖子

比较bash中两个变量的内容

我在bash脚本中有一个变量$data和变量$file:

data=$(echo "$(printf '%s\n' "${array[@]/%/$'\n\n'}")")
file=$(<scriptfile_results)
Run Code Online (Sandbox Code Playgroud)

那些变量将包含文本.如何比较这两个?一种选择是使用像这样的diff(1)实用程序:

diff -u <(echo "$data") <(echo "$file")
Run Code Online (Sandbox Code Playgroud)

这是比较两个变量内容的正确而优雅的方法吗?另外这个<( )技术怎么称呼?据我了解,每个<( )临时文件(命名管道)都是创建的..

bash diff

35
推荐指数
3
解决办法
4万
查看次数

了解Scapy"未找到目的地的Mac地址.使用广播." 警告

如果我生成一个没有任何上层有效载荷的以太网帧,并使用sendp()在第二层发送它,那么我收到"Mac address to reach destination not found. Using broadcast."警告并且放到线路的帧确实使用ff:ff:ff:ff:ff:ff作为目标MAC地址.为什么会这样?Scapy不应该发送我构造的框架吗?

我精心制作的包装如下:

>>> ls(x)
dst        : DestMACField         = '01:00:0c:cc:cc:cc' (None)
src        : SourceMACField       = '00:11:22:33:44:55' (None)
type       : XShortEnumField      = 0               (0)
>>> sendp(x, iface="eth0")
WARNING: Mac address to reach destination not found. Using broadcast.
.
Sent 1 packets.
>>> 
Run Code Online (Sandbox Code Playgroud)

scapy

15
推荐指数
1
解决办法
2万
查看次数

bash中字符串的多个替换

我有一个名为的变量inet,其中包含以下字符串:

inet="inetnum:        10.19.153.120 - 10.19.153.127"
Run Code Online (Sandbox Code Playgroud)

我想将此字符串转换为下面的符号:

10.19.153.120 10.19.153.127
Run Code Online (Sandbox Code Playgroud)

我可以轻松实现这一点sed 's/^inetnum: *//;s/^ -//',但我更喜欢更紧凑/优雅的解决方案并使用bash.嵌套参数扩展也不起作用:

$ echo ${${inet//inetnum: /}// - / }
bash: ${${inet//inetnum: /}// - / }: bad substitution
$ 
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?或者我应该使用sed这个时间?

bash

14
推荐指数
2
解决办法
1万
查看次数

理解bash"exec 1>&2"命令

我看到一个bash脚本exec 1>&2在一个函数中有命令.就像是:

function example()
{
    exec 1>&2
    cat <<EOT
Script requires at least one parameter.
EOT
    exit 1
} 
Run Code Online (Sandbox Code Playgroud)

据我所知,exec 1>&2意味着从这一点开始的一切都将被引导到stderr.这是某种形式的固定行为的高管需要知道的心脏或者是有这背后的一些很好的解释?我的意思是,据我所知,执行 Bash脚本只是调用一个命令采用与Bash脚本相同的PID,一旦命令完成,PID就会被终止.1>&2不是命令.有人可以解释命令背后的细节(尤其是问题原因)exec 1>&2吗?

bash exec

13
推荐指数
2
解决办法
2万
查看次数

使用管道命令忽略Bash脚本中的HUP信号

我有以下脚本/tmp无限期地监视目录,如果该目录中有任何文件操作,则文件名由while循环读取,文件名中的第一个a字符替换为b字符,并将此修改后的文件名记录到test.log文件中:

#!/bin/bash

trap ':' HUP
trap 'kill $(jobs -p)' EXIT

/usr/local/bin/inotifywait -q -m /tmp --format %f | 
  while IFS= read -r filename; do
    echo "$filename" | sed 's/a/b/' > test.log
  done
Run Code Online (Sandbox Code Playgroud)

这是实际脚本的简化版本.我上面的脚本也有一个Sys-V类型的init脚本,因为我希望保持LSB兼容,我的init脚本有force-reload(如果服务支持,则重新加载配置.否则,重新启动服务.)选项它将HUP信号发送到脚本.现在在执行之前执行force-reload,killproc -HUP test.sh输出pstree如下:

# pstree -Ap 4424
test.sh(4424)-+-inotifywait(4425)
              `-test.sh(4426)
# 
Run Code Online (Sandbox Code Playgroud)

执行后strace killproc -HUP test.sh,子shell终止:

# pstree -Ap 4424
test.sh(4424)---inotifywait(4425)
# 
Run Code Online (Sandbox Code Playgroud)

strace,killproc发送SIGHUP到过程4424和 …

bash shell signals pipeline pipe

8
推荐指数
1
解决办法
2265
查看次数

修改Scapy中的以太网FSC

我需要发送格式错误的以太网帧以进行测试.我已禁用Rx和Tx校验和的卸载:

root@T60:~# ethtool --show-offload eth0
Features for eth0:
rx-checksumming: off
tx-checksumming: off
    tx-checksum-ipv4: off [fixed]
    tx-checksum-unneeded: off [fixed]
    tx-checksum-ip-generic: off
    tx-checksum-ipv6: off [fixed]
    tx-checksum-fcoe-crc: off [fixed]
    tx-checksum-sctp: off [fixed]
Run Code Online (Sandbox Code Playgroud)

但是,这种卸载只涉及IP,TCP和UDP校验和吗?是否可以使用Scapy在以太网页脚中发送格式错误的帧序列检查帧?我在此非常怀疑计算以太网FSC可能是在NIC硬件中实现的吗?

scapy

6
推荐指数
1
解决办法
1952
查看次数

如果SNMP计数器的值小于先前的读数,图形工具应该如何表现?

我正在构建一个小型监控解决方案,并希望了解在先前读数大于当前读数的情况下,正确/最佳行为是什么.例如,ifHCOutOctetsSNMP对象计算从Cisco路由器中的接口传输的字节数.如果此计数器重置为0,例如由于路由器重启,图形应用程序应该如何运行?在我的选项中,以下算法是正确的行为:

if [ ! $prev_val ]; then
  # This reading will be used to set the baseline value for "prev_val" variable
  # if "prev_val" does not already exist.
  prev_val="$cur_val"
elif (( prev_val > cur_val )); then
  # Counter value has set to zero.
  # Use the "cur_val" variable.
  echo "$cur_val"
  prev_val="$cur_val"
else
  # In case "cur_val" is higher than or equal to "prev_val",
  # use the "cur_val"-"prev_val"
  echo $(( cur_val - prev_val ))
  prev_val="$cur_val"
fi
Run Code Online (Sandbox Code Playgroud)

我还根据上面的算法制作了一个小例子图:

基于算法的带宽图

基于此构建流量图:

reading …
Run Code Online (Sandbox Code Playgroud)

algorithm bash cisco

6
推荐指数
1
解决办法
216
查看次数

理解bash中的$''引用

至少在bash模式替换中经常使用以下引号:$' '例如,${arr[@]/%/$'\n\n\n'}在每个数组"arr"项之后打印三个换行符.这些是什么特别的报价?他们怎么称呼?除了bash模式替换之外,它们在哪里使用?

syntax bash quotes

5
推荐指数
1
解决办法
104
查看次数

在bash中侦听返回的UDP数据包

我为了学习目的而使用bash(4.0.33)网络支持,并尝试在bash中创建端口扫描程序.对于TCP,我打开了一个TCP/IP套接字

exec 3<>/dev/tcp/192.0.2.1/80

如果连接被拒绝或连接系统调用超时,则采取适当的措施.但是,使用UDP,我很容易发送数据包

echo > /dev/udp/192.0.2.1/53

但如何从正确的套接字读取返回的数据包?我的意思是发送到192.0.2.1的UDP数据报具有来自临时端口范围的源端口,因此我不知道/dev/udp/192.0.2.1/应该读取目录中的哪个套接字.或者,如果没有像tcpdump这样的外部工具,这不是可行的吗?

sockets bash

5
推荐指数
1
解决办法
9109
查看次数

Perl/e修饰符的安全性问题

假设我有一个Perl脚本,其中包含一个替换命令,它将替换字符串作为位置参数并使用/e修饰符:

perl -pe 's/abc/$ARGV[0]/ge;'
Run Code Online (Sandbox Code Playgroud)

这种方法是否存在安全问题?我的意思是可以给出这样的位置参数值,使perl执行不需要的功能吗?我的意思是类似的:perl -pe 's/abc//;unlink ("/tmp/file");'.

security perl

5
推荐指数
1
解决办法
148
查看次数

标签 统计

bash ×7

scapy ×2

algorithm ×1

cisco ×1

diff ×1

exec ×1

perl ×1

pipe ×1

pipeline ×1

quotes ×1

security ×1

shell ×1

signals ×1

sockets ×1

syntax ×1