【问题标题】:Python socket program with shell script?带有shell脚本的Python套接字程序?
【发布时间】:2013-03-31 23:28:33
【问题描述】:

我有两台机器通过交换机连接。我有一个流行的服务器应用程序,我们可以在机器 A 上调用它“SXC_SERVER”,然后我用机器 B 上的相应应用程序询问“SXC_SERVER”,我将它称为“SXC_CLIENT”。我想做的是两方面的:

  • 首先,通过tcpdump获取SXC_SERVER和SXC_CLIENT交互的流量。两者之间的交互是简单的 GET 和 RESPONSE,但我需要流量跟踪。
  • 其次,我想在每次交互/迭代期间记录 SXC_SERVER 进程的驻留集大小 (RSS) 使用情况

此外,我不仅需要一个通信流量跟踪和一个 SXC_SERVER 进程的内存使用日志,否则我不会写这篇文章,因为我可以在十分钟内离开并做那件事......事实上我的目标是做很多!但是为了简单起见,我们在这里说我想做 10 次。

因为这将非常耗费人力,因为它需要我在两台机器上停止和启动所有 SCX_CLIENT 到 SXC_SERVER 的询问、tcpdump 流量捕获和 RSS 内存使用SXC_SERVER 日志记录我想写一个自动化脚本。

但是!我不是程序员,也不是软件人......(该死)

但是,也就是说,我可以创建一个单独的客户端/服务器程序来监督这种自动化,我们可以将其称为 AUTO_SERVER 和 AUTO_CLIENT。我的想法是机器 B 将运行 AUTO_CLIENT,机器 A 将运行 AUTO_SERVER。两者的目的都是为了促进自动化,即停止和启动 tcpdump,以及在机器 B 使用 SXC_CLIENT 查询 SXC_SERVER 之前 SXC_SERVER 进程的机器 A 上的内存记录(如果你跟着我!) .

在运行一次 SXC_SERVER-to-SXC_CLIENT GET/RESPONSE 交互后,我最终会得到:

  • 一个名为 n1.pcap 的流量捕获 *.pcap 文件
  • 和一个名为 n1.csv 的内存日志转储(与进程关联的 RSS)。

我不是程序员或软件人,但我可以看到一个粗略的方法(尽我所能)来实现这一点,如下所示:

机器 A:AUTO_SERVER

BEGIN:

msgRecieved = open socket(listen on port *n*)

DO

1. wait for machine A to tell me when to start watch (as in the program) to log RSS memory usage of the SXC_SERVER process using hardcoded command:
watch -n 0.1 'ps -p $(pgrep -d"," -x snmpd) -o rss= | awk '\''{ i += $1 } END { print i }'\'' >> ~/Desktop/mem_logs/mem_i.csv

UNTIL (messageRecieved == "FINISH")

quit

END.

机器 B:AUTO_CLIENT

BEGIN:

open socket(new)

for i in 10, do

1. locally start tcpdump with hardcoded hardcoded tcpdump command with relevant filter to only capture the SXC_SERVER-to-SXC_CLIENT traffic and set output flag to capture all traffic to a PCAP file called n*i*.pcap where *i* is the integer of the current for loop, saving the file in folder "~/Desktop/test_captures/".
2. Send the GET request to SXC_SERVER
3. wait for RESPONSE reply from SXC_SERVER
4. after recieved reply tell machine B to stop watch command

i++

5. send string "FINISH" to machine A.

END.

如您所见,我假设这将通过在两台机器上使用单独的小型客户端/服务器类程序(这里我称之为 AUTO_SERVER 和 AUTO_CLIENT)来实现。 非常粗糙的伪代码设计应该是不言自明的。

我在这里找到了一个小型客户端/服务器套接字程序:http://www.velvetcache.org/2010/06/14/python-unix-sockets,如果我对其进行编辑,我认为它可能是合适的,但我不确定我如何才能切实可行地实现这一目标。您可以在其中提供一些帮助。

Python 能做到这一点自动化吗? 可以用一个 bash 脚本来完成吗? 你认为我在这方面走对了吗? 或者您有什么有用的建议?

问候。

【问题讨论】:

    标签: python sockets client-server automated-tests


    【解决方案1】:

    您可以将 Python 用于此类事情,但我强烈建议您使用 SSH 完成大部分工作(而不是自己编写连接代码),然后使用 bash 脚本或 Python 脚本来启动 tcpdump等进程。

    但是,您的问题对于 stackoverflow 来说有点过于开放 - 听起来您是在要求某人为您编写此程序,而不是寻求特定问题的帮助。

    【讨论】:

    • 感谢您的回复。我想它有点太开放了......自从你建议使用 SSH 和 Python 以来,我已经看过 Paramiko。 Paramiko 是否被分叉到 Python 的 SSH 模块中?...无论如何,除了 aculich 的回答,我还找到了一些可能对我有用的代码:link。也就是说,我不会执行远程脚本。我将执行两个需要终止的命令。手动我会使用 ctrl+c。我将如何在这里实现这一目标?
    • 如果您将命令作为脚本执行,您仍然可以终止该命令 - 如果 SSH 会话终止,它将默认终止其子项。所以我认为 Ctrl-C 应该默认工作。否则,请参阅stackoverflow.com/questions/1112343/…
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多