小编use*_*029的帖子

if then 逻辑在expect脚本中

我有一个用于 ssh 的期望脚本。我的一些主机会提示输入 RSA 主机密钥文本,而另一些则不会。如何在 Expect 中为 if/then 设置脚本。这是我到目前为止所拥有的。

#!/usr/bin/expect -f

set ipaddress [lindex $argv 0];
spawn ssh user@$ipaddress
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\r"
expect "user@$ipaddress's password:"
send "password\r"
set prompt {\$ $}
expect -re $prompt
send "$command\r"
expect -re $prompt
send "quit\r"
interact
Run Code Online (Sandbox Code Playgroud)

我需要在 if/then 逻辑中构建的部分是这两行:

expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\r"
Run Code Online (Sandbox Code Playgroud)

逻辑流程是:

if expect "Are you sure you want to continue connecting (yes/no)?"
then send …
Run Code Online (Sandbox Code Playgroud)

bash expect

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

如何在Scapy中发送多个数据包

我知道这已经被问过了。但是,我不清楚如何构造命令以完成任务,并且以前的问题从未标记为已回答。我需要发送多个数据包,而我的用例是使用UDP将DNS查询发送到远程服务器。这是我需要使用的命令:

sr1(IP(dst="192.168.155.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="www.oreilly.com")))
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,sr1表示在第3层发送数据包,但是还有更多的函数定义来发送数据包。见这里。大括号之间的其余部分是如何组装带有A记录的大写字母的DNS查询数据包。

但是我想做的是在一个命令中发送多个数据包。上一个问题对此有一个建议的答案:

sendp(p, iface=eth0, inter=1 , count=x )
Run Code Online (Sandbox Code Playgroud)

其中p是您的数据包或数据包列表,而count是重复发送操作的次数。

这是我迷路的地方。如果答案是正确的,我将如何将其集成到命令中,其外观将如何?

提前致谢!

linux udp scapy

4
推荐指数
1
解决办法
7764
查看次数

Expect 脚本 - 发送字符串所需的引号与 Expect 所需的引号发生冲突

我正在尝试使用expect远程登录服务器并更改用户密码。该应用程序要求,如果您要更改的密码包含特殊字符,则需要将其括起来。问题是,expect send 语句也需要被引用,当我尝试将两者结合起来时,脚本失败了。如果我删除密码周围的引号并且不使用特殊字符,则它可以正常运行。

send "CHANGEUSERPASSWORD $username PASSWORD "etdgsfdh$"\r" 
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的行并运行我得到的脚本

extra characters after close-quote
while executing
"send "CHANGEUSERPASSWORD $username PASSWORD "e"
Run Code Online (Sandbox Code Playgroud)

另外,它似乎只不喜欢 $ 字符,因为我可以将 @ 附加到密码末尾,而无需将其括在引号中,并且脚本运行良好。我怎样才能使用包含 $ 的密码来使其工作,这需要我将其用引号引起来,这显然与期望引用冲突?请注意,$ 可以位于密码中的任何位置,而不仅仅是像我的示例中那样位于末尾。

这是我的完整上下文脚本:

#!/usr/bin/expect -f

set password [lindex $argv 0];

spawn telnet 192.168.100.100 106
expect "200 PWD Server ready"
send "USER user\r"
expect "300 please send the PASS"
send "PASS pass\r"
expect "200 login OK, proceed"
send "CHANGEUSERPASSWORD $username PASSWORD "etdgsfdh$"\r"
expect "200 OK"
send "quit\r"
interact
Run Code Online (Sandbox Code Playgroud)

我还尝试使用此行将密码设置为变量:

set password [lindex $argv 0];
Run Code Online (Sandbox Code Playgroud)

并改变这一行: …

linux bash expect

3
推荐指数
1
解决办法
8156
查看次数

awk在不删除文件中的其他内容的情况下进行文件更改

我正在使用以下代码来修改文件的内容.

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file
Run Code Online (Sandbox Code Playgroud)

我发现只有这个命令输出(到屏幕)只有我告诉它的文件的更改.

我已经尝试修改命令将更改写回文件.

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file  > tmp && …
Run Code Online (Sandbox Code Playgroud)

bash awk

0
推荐指数
1
解决办法
39
查看次数

按文件中的 IP 打印每个唯一行的最后一次出现

我需要解析一个日志文件,以便以下条目是这样的:

Jul 23 17:38:06 192.168.1.100 638 "this message will always be the same"
Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."


Jul 23 18:14:17 192.168.1.101 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)

基本上我正在做的是获取一个具有重复 IP 地址但具有不同时间戳的文件,并找到每个 IP 地址的最后一次出现(或最近一次出现),并将其打印到屏幕上或将其定向到另一个文件中。

我尝试过的:

我写了一个 bash 脚本,我认为它可以让我这样做,但它不起作用。 …

bash awk

0
推荐指数
1
解决办法
256
查看次数

标签 统计

bash ×4

awk ×2

expect ×2

linux ×2

scapy ×1

udp ×1