How to set proxy for JMeter from behind another proxy? - proxy

I'm new to jmeter.
I'm trying to test a web app using proxy server.
I have gone through the jmeter docs and got the settings but I'm currently working under company proxy.
So how can I set the proxy server for jmeter from behind the current proxy?

Read :
https://jmeter.apache.org/usermanual/get-started.html#proxy_server
If you are testing from behind a firewall/proxy server, you may need to provide JMeter with the firewall/proxy server hostname and port number.
To do so, run the jmeter.bat/jmeter file from a command line with the following parameters:
- '-H' [proxy server hostname or ip address]
- '-P' [proxy server port]
- '-N' [nonproxy hosts] (e.g. *.apache.org|localhost)
- '-u' [username for proxy authentication - if required]
- '-a' [password for proxy authentication - if required]
Example :
jmeter -H my.proxy.server -P 8000 -u username -a password -N localhost
Alternatively, you can use --proxyHost, --proxyPort, --username, and --password
If you're looking to learn jmeter correctly, this book will help you.

Change Port and Proxy on JMeter 5.0
used the Proxy and the Port below Just as example , it was origenal answer for this question - Cannot capture jmeter traffic in fiddler
UI Mode
Create Thread Group --> HTTP Request
Go to Advanced fill "Server Name or IP:" = 127.0.0.1 , "Port Number:" = 8888
Non UI MODE
Add to your command -H 127.0.0.1 for Proxy Host
-P 8888 for Proxy port
Example:
C:\jmeter5.0\bin>jmeter -n -t C:\example.jmx -l C:\scriptresults.jtl -H 127.0.0.1 -P 8888

Related

record https traffic for proxy based web applications in jmeter

I have a web application which is hosted to a proxy server.I need to record some scripts of this web application using Jmeter.
When i set browser proxy to Jmeter localhost:8888 i am unable to access my web application which is hosted on some other proxy server.
I need to set up both proxies at same time in my browser and do recording.
Please help.
If you need to use the proxy in order to access your application you need to let JMeter know your proxy server details. As per Using JMeter behind a proxy user manual entry:
To do so, run the jmeter[.bat] file from a command line with the following parameters:
-H [proxy server hostname or ip address]
-P [proxy server port]
-N [nonproxy hosts] (e.g. *.apache.org|localhost)
-u [username for proxy authentication - if required]
-a [password for proxy authentication - if required]
jmeter -H my.proxy.server -P 8000 -u username -a password
In order to be able to record HTTPS traffic you will need to install JMeter's self-signed certificate into your browser. The relevant file is ApacheJMeterTemporaryRootCA.crt and it's being generated in "bin" folder of your JMeter installation when you start HTTP(S) Test Script Recorder. See HTTPS recording and certificates chapter of the above manual entry for more details and Recording HTTPS Traffic with JMeter's Proxy Server for more details.

Jmeter distribtion testting on linux

I am trying do distributed testing on linux server using apache-jmeter 2.9
The default port (1099) is already used(by jboss)
I changed the port as 1097
I start jmeter-server on one machine for now and start test on single machine.
jmeter-server seems to start succesfuly
but when evern i trying to exceute script is shows following error.
[jboss#StagingSvr2 bin]$ ./jmeter -n -t CBL_Load/CBL_Admin_Load.jmx -l
.jtl -R 172.16.0.2
Creating summariser <summary>
Created the tree successfully using CBL_Load/CBL_Admin_Load.jmx
Configuring remote engine for 172.16.0.2
Failure connecting to remote host: 172.16.0.2
java.rmi.ConnectIOException: non-JRMP server at remote endpoint
Failed to configure 172.16.0.2
[![enter image description here][1]][1]No remote engines were started.
I have gone through google but not able to find exact solution that where I am doing blundder!
Make sure nothing is listening at the port 1097 using netstat or nc or telnet. Looking into non-JRMP server at remote endpoint something is present there which is not JMeter RMI endpoint. Try locating a free port using aforementioned tools and bind JMeter slave to it
With regards to bind JMeter slave I would recommend amending your startup command to something like:
./jmeter-server -Dserver_port=xxxx
where xxxx is a free port on your Linux system
Amend your Master startup command to include the port as well like:
./jmeter -R 172.16.0.2:xxxx -n -t CBL_Load/CBL_Admin_Load.jmx -l result.jtl
More information:
JMeter Remote Testing: Using a different port
How to Perform Distributed Testing in JMeter

Jmeter recording error 401

I try to record my test with jmeter. So I configure my JMeter Script Recorder to use the port 8080. In my browser, i set the proxy to localhost 8080.
I my system.properties file, I set the proxy of my firm.
When I start the recorder and try to go on my site, I've the following error "Connexion reset". When I try to go on google I've the following error "content encoding error".
Do you have any Idea ?
HTTP Error 401 stands for Unauthorized so my expectation is that your corporate proxy required valid credentials. As per Using JMeter behind a proxy article you can pass username and password via -u and -a command-line arguments correspondingly.
-H [proxy server hostname or ip address]
-P [proxy server port]
-N [nonproxy hosts] (e.g. *.apache.org|localhost)
-u [username for proxy authentication - if required]
-a [password for proxy authentication - if required]
So you need to start JMeter like:
jmeter -H your_corporate_proxy_host -P your_corporate_proxy_port -u username -a password
Alternative option is using JMeter Chrome Extension, in this case you won't need to worry about setting up proxies and SSL certificates.

JMeter Recording: 401 Unauthorized response after changed HTTP proxy to localhost

I just start learning JMeter. I'm trying to use JMeter to record my company websites, .NET web application.
My issue is that: For security, to access the websites, we have to config "Manual proxy configuration" to 10.x.x.x:3128. However, to record in JMeter I have to change the config to localhost, port 3128.
After I changed the config to localhost, I click Start button of HTTP Test Script Recorder then I click on any link, the Authorization dialog displays and I keep getting 401 unauthorized error although I enter correct username/password.
I tried to use HTTP Authorization Manager, HTTP Request Defaults or HTTP Request but they do not work.
Could anyone help me out?
If your company uses proxy for Internet access you can "tell" JMeter to use this proxy as well. So you need to perform the following configuration:
Configure JMeter to use your proxy to access Internet via following command-line arguments (as per documentation):
If you are testing from behind a firewall/proxy server, you may need to provide JMeter with the firewall/proxy server hostname and port number. To do so, run the jmeter[.bat] file from a command line with the following parameters:
-H [proxy server hostname or ip address]
-P [proxy server port]
-N [nonproxy hosts] (e.g. *.apache.org|localhost)
-u [username for proxy authentication - if required]
-a [password for proxy authentication - if required]
Example : jmeter -H my.proxy.server -P 8000 -u username -a password -N localhost
Add HTTP(S) Test Script Recorder with default port of 8080 (or any other)
Configure your browser to use JMeter host and port 8080 for accessing Internet. If there is No proxy for localhost, 127.0.0.1 stanza somewhere in browser's proxy configuration - untick or remove it in case of running browser and JMeter on the same machine. "Classic" Firefox configuration should look something like:
It may be easier to use JMeter Chrome Extension, in that case you don't need to worry about proxy settings, SSL certificates and associated configuration, cookies, etc.

Proxy built with netcat not allowing http basic authentication

I made a simple proxy server using nc, here's the one-liner:
mkfifo queueueue
nc -l 8080 <queueueue | nc http://$JENKINS_HOSTNAME 80 >queueueue
It listens on port 8080 and then forwards the data to a connection to our Jenkins server. Jenkins is behind a VPN, and the machine I am running this proxy on has VPN access.
On my other machine (no VPN access), I would like to curl the Jenkins server, here's the command to initiate the request through the proxy:
http_proxy=10.1.10.10:8080 curl --user $JENKINS_USERNAME:$JENKINS_PASSWORD http://$JENKINS_HOSTNAME/api/json
Both the client and the proxy machine are on the same network, I can ping and ssh between them, also, I know that the client is connecting to the proxy server, I think the failure is arising when the client is trying to authenticate, here's the output when I try to curl:
$ http_proxy=10.1.10.10:8080 curl --user $JENKINS_USERNAME:$JENKINS_PASSWORD http://$JENKINS_HOSTNAME/api/json
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved here.</p>
<hr>
<address>Apache Server at $JENKINS_HOSTNAME Port 80</address>
</body></html>
How can I curl through a proxy like this with HTTP Basic Authentication?
I would use ssh for this instead of netcat.
Just to get some confusion out of the way, I will be referring to the node with VPN access as the "server", and the node without VPN access as the "client".
On the server side you should only need to install and have an ssh server running (in my test I have OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011).
On the client side you will need to do the following:
1) in your /etc/hosts file add in the address that your target URL resolves as on the server. I wasn't able to get curl to run DNS lookups through the proxy, which is why this is necessary.
2) setup ssh keys between the server and the client. while this is not necessary, it makes life easier.
3) run the following ssh command to have ssh act as a SOCKS proxy:
user#host$ ssh -vND 9999 <server>
-v is there so you can see what is going on with ssh,
-N tells ssh to not execute a remote command - this is useful for just simple port forwarding
-D this option is what actually forwards your local requests to the server
4) now you should be able to run the curl command you have above, but add in
---socks5 localhost:9999
Your full command will look like this:
curl --user $USER:$PASSWORD --socks5 localhost:9999 http://$JENKINS/api/json
If I can figure out how to forward the DNS requests from curl through ssh I'll update the ticket.
edit: formatting, awful grammar.

Resources