如何将源IP设置为http请求?

时间:2016-05-30 14:30:22

标签: java http ip jmeter

我需要在发送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个扩展HTTPURLConnectionURLConnection和实施URLStreamHandler的课程。这看起来工作正常;但是我得到了例外情况,我认为是因为我没有像上面的帖子中提到的那样为URLStreamHandlerFactory实施getInputStream

我有几个问题
1 GT;我正在从[{1}}扩展自定义URLConnection课程,因此无论如何它都需要实施URLConnection,这是一种虚拟方法
2 - ;如果我必须这样做,有人可以提供此方法的示例实现吗?

3 个答案:

答案 0 :(得分:2)

JMeter已经提供了IP Spoofing功能。

在Http Request Defaults中,选择(在JMeter 3.0版本中)高级选项卡:

enter image description here

请参阅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);
    }
}

您不必以这种方式覆盖任何内容。