在JMeter测试过程中,有时需要模拟不同IP发送请求。例如服务端根据IP对并发用户的数量进行限制,或者同样的IP在短时间内的多次请求可能会被服务端屏蔽,那么这时候IP欺骗就可以派上用处了。

- 前期准备

JMeter进行IP欺骗的原理很简单,就是将本地网卡绑定多个IP,JMeter使用该网卡配置的合理IP发送请求,因此这种IP欺骗,对外网是无效的,只能用于内网的测试。 在一些公司环境中,某些网线端口已经固定IP,使用自己配置的固定IP无法正常访问网络,或者此端口与局域网内其他IP冲突,此时可能报错误:Java.net.BindException: Cannot assign requested address: JVM_Bind。此时可以咨询公司IT(解决端口固定IP问题),或者PING一下端口查看是否占用(解决冲突问题),或者自己用交换机自己组建一个简单干净的局域网进行测试。

- 批量添加电脑IP

使用Change adapter settings手动逐个添加IP也是可以做到的,由于我们这次要增加比较多的IP,那么手动添加显然是费时费力,使用批量脚本可以提高效率。 首先运行以下批处理脚本,生成一份ipaddress_1000.txt供JMeter使用,同时将对应的IP配置进名为"Ethernet"的网卡。如果Console没报错,并且最后出现我们脚本中的Config is finished!就表示完成了。由于部分公司电脑权限问题配置不成功,可以试一试右键批处理脚本选择Run as administrator。

@echo off for /l %%j in (1,1,20) do ( for /l %%i in (1,1,50) do ( echo 169.254.%%j.%%i,>>ipaddress_1000.txt netsh interface ip add address name="Ethernet" address=169.254.%%j.%%i mask=255.255.0.0 ) ) @echo Config is finished! pause

- JMeter相关配置

在Test Plan下面添加Config Element - CSV Data Set Config, 引用刚才生成的ipaddress_1000.txt,变量名称设置为SourceIP,分隔符为”,“,那么文件中的IP就会按顺序添加进变量SourceIP中,可以被线程使用了。

jmeter检测服务器ip是否可用(使用JMeter批量配置)(1)

在Test Plan下面添加Config Element - HTTP Request Defaults,修改Advanced - Implementation 为 HttpClient4, Source address使用变量SourceIP即可。

jmeter检测服务器ip是否可用(使用JMeter批量配置)(2)

- 利用JMeter进行压测

正常配置JMeter脚本即可测试,为了验证IP是否生效,可在样本名称后缀加上变量SourceIP。

jmeter检测服务器ip是否可用(使用JMeter批量配置)(3)

由于端口占用比较多,在部分电脑上跑着跑着可能出现Java.NET.BindException: Address already in use: connect错误,这是由于socket.close()操作并不能立即释放绑定的端口,而是需要TIMEWAIT(默认240s),过段时间才会释放。 可以尝试添加以下注册表条目后等待一段时间重试:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters MaxUserPort 65334 TcpTimedWaitDelay 30

- 环境恢复

运行下列命令将网络连接的静态IP地址改为自动获取即可恢复环境。

netsh interface ip set address "Ethernet" source=DHCP

,