You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SIPP的<exec>段中使用变量及注入命令行传入的字符串

刚好我对SIPP的段变量使用很熟悉,给你两个问题的具体解决方案,都是实操过的:

一、在段中使用SIPP变量

SIPP的标签支持直接引用预定义全局变量或者从SIP消息中提取的会话变量,核心是用$变量名的格式在cmd属性里调用,SIPP会在执行命令前自动完成变量替换。

举个完整的例子:

<scenario name="exec_var_example">
  <!-- 1. 声明全局变量 -->
  <variable name="default_pcap" value="sipp_default.pcap"/>

  <!-- 2. 从SIP消息提取会话变量(比如从INVITE的From头拿用户名) -->
  <recv request="INVITE">
    <action>
      <ereg regexp="sip:(.*)@" search_in="hdr" header="From" assign_to="$caller_username"/>
    </action>
  </recv>

  <!-- 3. 在exec中组合使用变量 -->
  <exec cmd="/usr/bin/tcpdump -w $default_pcap -i eth0 host $caller_username" log="true"/>
</scenario>

这里$default_pcap是预先定义的全局变量,$caller_username是从消息中提取的会话变量,SIPP执行时会把它们替换成实际值再运行tcpdump命令。

二、将命令行传入的字符串注入到段中

SIPP支持通过命令行参数-set var=value传递自定义变量,只要在脚本里先声明对应变量,就能直接在里引用。

步骤拆解:

  1. 脚本中声明变量(可以给默认值,也可以留空):
<scenario name="cmd_line_exec_example">
  <variable name="custom_cmd_param" value="default_log.txt"/>
  
  <!-- 引用命令行传入的变量 -->
  <exec cmd="echo 'Call completed' >> $custom_cmd_param" log="true"/>
</scenario>
  1. 命令行传递变量:
    如果要传递简单字符串:
sipp 127.0.0.1 -sf your_scenario.xml -set custom_cmd_param "call_records_$(date +%Y%m%d).txt"

如果要传递完整命令片段:

sipp 127.0.0.1 -sf your_scenario.xml -set custom_cmd_param "/usr/bin/tcpdump -w dynamic_pcap.pcap -i any port 5060"
  1. 注意事项:如果传递的参数包含空格、特殊字符,一定要用双引号括起来,避免被shell拆分。

另外,你也可以直接引用SIPP的内置变量(比如$call_id、$local_port)到里,用法和自定义变量完全一致。

内容的提问来源于stack exchange,提问作者Makesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:59:42