You cannot, normally, run a
.jar file (which is a Java ARchive file) using the
open command on OS X. It's not a executable file, it doesn't give the system any hints about how it should be run normally, so
open is giving you the
LSOpenURLsWithRole() error you see above.
First, you'll need to install Java on your Mac. The easiest way to do this is to open a
Terminal.app window and type:
If that returns a java version like this:
> java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
You're done. Java is ready to be used. If java isn't present on your system, running that command will pop up a window asking if you want to install it. Follow the prompts and when you're done,
java -version will show you something like what you see above. The version may be different, but the command will now work.
Now you need to run your
.jar file using the
java command. You need to provide three options to the
java command in order for this to work:
-jar option which tells
java you're running the contents of a Java ARchive file;
- A memory option for the Java Virtual Machine in the form
-Xmx1024m; and finally
- The path to the
.jar file on disk.
For your download it's all going to look like this:
java -jar -Xmx1024m /Users/user/Downloads/burpsuite_free_v1.6.01.jar
That will start the program HOWEVER it still won't be able to bind to ports 80 and 443. Those are protected ports. Ports <1024 on any Mac OS X machine can only be bound to be processes started as
The correct way to run programs as
root is to use the sudo command, not to
login as the
root user. This provides a level of control and indirection to your actions so you don't do something accidentally silly like
rm -rf / without a prompt asking you if you're sure you want to do such a silly thing.
So, the final form of your command will be:
sudo java -jar -Xmx1024m /Users/user/Downloads/burpsuite_free_v1.6.01.jar
You'll be prompted for your password and, assuming nothing else is already bound to ports 80 and 443, your application will start and being listening on those ports.
If it fails because it cannot bind to 80 and 443, you'll need to find out what's bound there already and shut it down. You can use the lsof command to figure this out.
For port 80 the call is:
sudo lsof -iTCP:80 -sTCP:LISTEN -n -P
For 443 it's:
sudo lsof -iTCP:443 -sTCP:LISTEN -n -P
The output from that command, assuming something is listening on the port, will look something like this:
> sudo lsof -iTCP:80 -sTCP:LISTEN -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 50 root 9u IPv6 0x8978b255ac4ef0b7 0t0 TCP *:80 (LISTEN)
As you can see, I have a process named
nginx listening port 80. It has process ID 50.
I can kill that process with:
sudo pkill nginx
That doesn't necessarily guarantee it won't try and come back, but how to deal with this fully and completely is best stated as entirely separate question on the site altogether.