我需要在发送http请求之前设置源IP地址(用于IP欺骗等)。用于设置http连接的类是return _.map(_.compact([
$scope.status() ? false : "status",
($scope.evidenceLevel || {}).id ? false : "evidence_level",
($scope.association || {}).id ? false : "association",
$scope.predictiveStatement ? false : "predictive_statement",
$scope.evidenceStatement ? false : "evidence_statement",
($scope.hasIncludedReference() || isReferred()) ? false : "reference"
]), myFunction);
。我发现下面的stackoverflow链接非常有用。
Registering and using a custom java.net.URL protocol
在帖子中,我已经创建了3个扩展HTTPURLConnection
,URLConnection
和实施URLStreamHandler
的课程。这看起来工作正常;但是我得到了例外情况,我认为是因为我没有像上面的帖子中提到的那样为URLStreamHandlerFactory
实施getInputStream
。
我有几个问题
1 GT;我正在从[{1}}扩展自定义URLConnection
课程,因此无论如何它都需要实施URLConnection
,这是一种虚拟方法
2 - ;如果我必须这样做,有人可以提供此方法的示例实现吗?
答案 0 :(得分:2)
JMeter已经提供了IP Spoofing功能。
在Http Request Defaults中,选择(在JMeter 3.0版本中)高级选项卡:
请参阅http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request_parms1:
来源地址字段 [仅适用于HTTPClient实施的HTTP请求] 此属性用于启用IP欺骗。它会覆盖此示例的默认本地IP地址。 JMeter主机必须具有多个IP地址(即IP别名,网络接口,设备)。该值可以是主机名,IP地址或网络接口设备,例如“eth0”或“lo”或“wlan0”。 如果定义了属性httpclient.localaddress,则用于所有HttpClient请求。
答案 1 :(得分:0)
基于 UBIK LOAD PACK 的答案。以下是使用Aapche http客户端3.x的相同代码。 (用于设置源IP的变量是args[1]
)
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.protocol.Protocol;
public class HC3Test {
public static void main(String[] args) throws Exception {
String url = args[0];
java.net.URL uri = new java.net.URL(url);
HostConfiguration hc = new HostConfiguration();
hc.setHost(uri.getHost(), uri.getPort(), Protocol.getProtocol(uri.getProtocol()));
hc.setLocalAddress(java.net.InetAddress.getByName(args[1]));//for pseudo 'ip spoofing'
HttpClient client = new HttpClient(new SimpleHttpConnectionManager());
client.setHostConfiguration(hc);
GetMethod method = new GetMethod(url);
client.executeMethod(method);
method.releaseConnection();
}
}
http client 4.x的示例代码:
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
public class HC4Test {
public static void main(String[] args) throws Exception {
DefaultHttpClient httpClient = new DefaultHttpClient();
org.apache.http.params.HttpParams params = httpClient.getParams();
params.setParameter(ConnRoutePNames.LOCAL_ADDRESS,
java.net.InetAddress.getByName(args[1]));//for pseudo 'ip spoofing'
httpClient.execute(new HttpGet(args[0]));
}
}
答案 2 :(得分:-1)
要通过http请求获得不同的源地址,您可以使用本地代理。
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
public class Huhu {
public static void main(String[] args) throws IOException {
URL url = new URL("http://google.com");
Proxy proxy = new Proxy(Proxy.Type.DIRECT,
new InetSocketAddress(
InetAddress.getByAddress(
new byte[]{your, ip, interface, here}), yourTcpPortHere));
URLConnection conn = url.openConnection(proxy);
}
}
您不必以这种方式覆盖任何内容。