Lines 30-38
Link Here
|
30 |
import java.nio.charset.Charset; |
30 |
import java.nio.charset.Charset; |
31 |
import java.security.GeneralSecurityException; |
31 |
import java.security.GeneralSecurityException; |
32 |
import java.util.ArrayList; |
32 |
import java.util.ArrayList; |
|
|
33 |
import java.util.Collections; |
34 |
import java.util.Enumeration; |
33 |
import java.util.HashMap; |
35 |
import java.util.HashMap; |
34 |
import java.util.List; |
36 |
import java.util.List; |
35 |
import java.util.Map; |
37 |
import java.util.Map; |
|
|
38 |
import java.net.Inet4Address; |
39 |
import java.net.Inet6Address; |
40 |
import java.net.NetworkInterface; |
41 |
import java.net.SocketException; |
36 |
|
42 |
|
37 |
import org.apache.commons.lang3.StringUtils; |
43 |
import org.apache.commons.lang3.StringUtils; |
38 |
import org.apache.http.Header; |
44 |
import org.apache.http.Header; |
Lines 568-573
Link Here
|
568 |
return httpClient; |
574 |
return httpClient; |
569 |
} |
575 |
} |
570 |
|
576 |
|
|
|
577 |
static private String getInterfaceAddress(String interfaceName) throws SocketException { |
578 |
// By default use ipv4 addresses |
579 |
Class<?> inetClass = Inet4Address.class; |
580 |
if (interfaceName.toLowerCase().startsWith("ipv6:")) { |
581 |
interfaceName = interfaceName.substring(5); |
582 |
inetClass = Inet6Address.class; |
583 |
} else { |
584 |
if ( interfaceName.toLowerCase().startsWith("ipv4:")) { |
585 |
interfaceName = interfaceName.substring(5); |
586 |
} |
587 |
} |
588 |
|
589 |
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); |
590 |
for (NetworkInterface netInterface : Collections.list(nets)) { |
591 |
if (netInterface.getName().equals(interfaceName)) { |
592 |
Enumeration<InetAddress> inetAddresses = netInterface.getInetAddresses(); |
593 |
ArrayList<InetAddress> inetAddressesList = Collections.list(inetAddresses); |
594 |
for (int i=0; i < inetAddressesList.size(); i++) { |
595 |
if (inetClass == inetAddressesList.get(i).getClass()) { |
596 |
return inetAddressesList.get(i).getHostAddress(); |
597 |
} |
598 |
} |
599 |
} |
600 |
} |
601 |
return ""; |
602 |
} |
603 |
|
571 |
private void setupRequest(URL url, HttpRequestBase httpRequest, HTTPSampleResult res) |
604 |
private void setupRequest(URL url, HttpRequestBase httpRequest, HTTPSampleResult res) |
572 |
throws IOException { |
605 |
throws IOException { |
573 |
|
606 |
|
Lines 576-583
Link Here
|
576 |
// Set up the local address if one exists |
609 |
// Set up the local address if one exists |
577 |
final String ipSource = getIpSource(); |
610 |
final String ipSource = getIpSource(); |
578 |
if (ipSource.length() > 0) {// Use special field ip source address (for pseudo 'ip spoofing') |
611 |
if (ipSource.length() > 0) {// Use special field ip source address (for pseudo 'ip spoofing') |
579 |
InetAddress inetAddr = InetAddress.getByName(ipSource); |
612 |
// Try to treat ipSource as interface |
580 |
requestParams.setParameter(ConnRoutePNames.LOCAL_ADDRESS, inetAddr); |
613 |
String interfaceAddress = getInterfaceAddress(ipSource); |
|
|
614 |
if (interfaceAddress.length() > 0) { |
615 |
InetAddress inetAddr = InetAddress.getByName(interfaceAddress); |
616 |
requestParams.setParameter(ConnRoutePNames.LOCAL_ADDRESS, inetAddr); |
617 |
} |
618 |
else { |
619 |
InetAddress inetAddr = InetAddress.getByName(ipSource); |
620 |
requestParams.setParameter(ConnRoutePNames.LOCAL_ADDRESS, inetAddr); |
621 |
} |
581 |
} else if (localAddress != null){ |
622 |
} else if (localAddress != null){ |
582 |
requestParams.setParameter(ConnRoutePNames.LOCAL_ADDRESS, localAddress); |
623 |
requestParams.setParameter(ConnRoutePNames.LOCAL_ADDRESS, localAddress); |
583 |
} else { // reset in case was set previously |
624 |
} else { // reset in case was set previously |