首先给测试机单个网卡分配多个IP。这个不同系统分配方式是不一样的,具体方法可以在网上搜搜。总之,Windows和Linux下都有方法搞定,Windows下我目前只知道手动增加IP的方式,至于批量增加(也就是写个配置文件搞定)行不行还需要研究一下。

单个网卡分配了多个IP之后,就可以改脚本了。

补充一下Linux下设置多IP的方法:

有两个方法,根据需要使用。当IP数不多的时候建议使用方法一,否则使用方法二。

方法一:修改网卡配置文件,给网卡绑定多IP

修改这个文件:/etc/network/interfaces,改成如下形式

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.76.192
netmask 255.255.255.0
gateway 192.168.76.254

//多个不同IP段,只要1个gateway配置即可,其他IP不需要配置gateway

auto eth0:0
iface eth0:0 inet static
address 192.168.76.193
netmask 255.255.255.0
然后重启网络服务:/etc/init.d/networking restart 即可

方法二:执行ip addr add 188.0.0.0/24 dev lo,这样就增加了255个IP。其中/24代表的是子网掩码的主机位,根据需要设置相应的主机数(也就是IP数)。列表如下:

子网位 /主机位 子网掩码 子网最大数 /主机最大数
/22 /10 | 255.192.0.0 2 /4194302 
/21 /11 | 255.224.0.0 6 /2097150 
/20 /12 | 255.240.0.0 14 /1048574 
/19 /13 | 255.248.0.0 30 /524286 
/18 /14 | 255.252.0.0 62 /262142 
/17 /15 | 255.254.0.0 126 /131070 
/16 /16 | 255.255.0.0 254 /65536 
/15 /17 | 255.255.128.0 510 /32766 
/14 /18 | 255.255.192.0 1022 /16382 
/13 /19 | 255.255.224.0 2046 /8190 
/12 /20 | 255.255.240.0 4094 /4094 
/11 /21 | 255.255.248.0 8190 /2046 
/10 /22 | 255.255.252.0 16382 /1022 
/9 /23 | 255.255.254.0 32766 /510 
/8 /24 | 255.255.255.0 65536 /254 
/7 /25 | 255.255.255.128 131070 /126 
/6 /26 | 255.255.255.192 262142 /62 
/5 /27 | 255.255.255.224 524286 /30 
/4 /28 | 255.255.255.240 1048574 /14 
/3 /29 | 255.255.255.248 2097150 /6 
/2 /30 | 255.255.255.252 4194302 /2

这个命令相当于在本地环回接口上绑定虚拟IP,是可以被SIPp支持的。

执行之后可以试着ping 188.0.0.1,看看是否能ping通。如果可以ping通,就说明已经配置成功了。也可以执行ip addr查看是不是有inet 188.0.0.0/24 scope global lo类似这行。
这种方法还需要在服务器端配置相应的路由。否则服务器收到你自己设置的虚拟IP发来的报文,肯定不知道怎么找到你。默认的路由肯定会把服务器指向其他乱七八糟的地方。所以需要在服务器端使用route命令配置路由,遇到这种特殊IP都直接路由到你的机器IP上就行了。

 

好,修改完主机IP,就可以开始修改SIPp脚本了。

在这里先说一个SIPp的BUG——虽然SIPp很强大,但是BUG还是满天飞啊!!!

使用多IP方式发起注册和呼叫时,貌似第一个数据包中“本地端口”这个变量永远是0!但后面的数据包正常,非常让人匪夷所思啊!

于是,我们只能在场景里写死端口号。例子如下(注册场景中部分内容,注意红色部分是在原场景上修改的内容):

  <send retrans="5000">
    <![CDATA[

      REGISTER sip:[remote_ip] SIP/2.0
      Via: SIP/2.0/[transport] [field2]:5061;branch=[branch];rport
      Route: <sip:[remote_ip]:[remote_port];lr>
      From: [field0] <sip:[field0]@[remote_ip]:[remote_port]>;tag=[call_number]
      To: [field0] <sip:[field0]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      CSeq: 1 REGISTER
      Contact: <sip:[field2]:5061>
      Max-Forwards: 70
      Expires: 3600
      Content-Length: 0

    ]]>

   </send>

有的时候注册不需要Contact,各位根据情况添加。

也就是说,把所有原来是[local_ip]的地方替换成[field2],把所有[local_port]的地方替换成5061(就是你定义的端口号)。

然后修改csv文件:

200;[authentication username=200 password=200];192.168.0.100
300;[authentication username=300 password=300];192.168.0.101
400;[authentication username=400 password=400];192.168.0.102

……

也就是说想给用户分配哪个IP,就在csv文件那个用户后面加上那个IP。

最后在调用SIPp启动场景的时候,一定要加上-t ui -ip_field 2这两个参数。(其中-ip_field 2可以理解为[field2],也就是告诉sipp用哪个参数作为源IP地址发起呼叫)

另外,别忘记加上-p参数指定端口。

比如:sipp -sf reg.xml -inf reg.csv -p 5061 -m 1 -r 1 -t ui -ip_field 2 192.168.0.123(服务器IP)

 

如果想让UAS也支持多IP,更简单,执行sipp -sf uas.xml -inf uas.csv -p 5062 -t ui -ip_field 0

其中uas.xml如果有需要写IP什么的信息,可以使用正则表达式来提取服务器返回报文中的IP端口什么的,然后以变量的方式用到场景中。

uas.csv配置文件只要写可能涉及的本机IP地址就好了,比如:

SEQUENTIAL
192.168.0.100
192.168.0.101

……

文章版权:杜斟的个人博客 - 个人技术分享

本文链接:http://mcat.cc/index.php/archives/490/

转载请注明文章原始出处 !

添加新评论

返回顶部