Hello On 2023-01-31 16:05, Haines Brown wrote:
I have an application that refuses to start because its port is blocked. But I have difficulty knowing what port it is $ java -jar /usr/local/share/JabRef/JabRef-3.2.jar & [1] 4831 haines@lenin:~$ Jan 31, 2023 8:36:39 AM net.sf.jabref.logic.remote.server.Remote ListenerServerLifecycle open WARNING: Port is blocked java.net.BindException: Address already in use at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:555) at java.base/sun.nio.ch.Net.bind(Net.java:544)at java.base/sun.nio.ch.NioSocketImpl.bind(NioSocketImpl.java:643)at java.base/java.net.ServerSocket.bind(ServerSocket.java:388)at java.base/java.net.ServerSocket.<init>(ServerSocket.java:274)at net.sf.jabref.logic.remote.server.RemoteListenerServer.<init>(RemoteListenerServer.java:40) at net.sf.jabref.logic.remote.server.RemoteListenerServerThread.<init>(RemoteListenerServerThread.java:33) at net.sf.jabref.logic.remote.server.RemoteListenerServerLifecycle.open(RemoteListenerServerLifecycle.java:41) at net.sf.jabref.JabRef.start(JabRef.java:137) at net.sf.jabref.JabRefMain.main(JabRefMain.java:8) Arguments passed on to running JabRef instance. Shutting down. How do I know from this what port the java application tried to use? I try: $ strings $(which jabref) | wc -l 56 So I try: $ sudo ss -pt state listening 'sport = :56' Recv-Q Send-Q Local Address:Port Peer Address:Port Process This seems a null return. Dores this mean jabref is not using port 56?
If ss, or lsof, or any other tool that shows used ports doesn't show port 56 being used. Then it's not being used. Or in your case, since you're filtering ss output to only listening TCP ports, IF it being used, it might be on a different state that "listening". Or it could be UDP, but I'm assuming you except jabref to use a TCP port, thus the use of '-t' option (Disclaimer, I don't what protocols jabref uses)
However I'm not sure what makes you think jabref is trying to use (either TCP or UDP) port 56. It your example you didn't show or tell what to tried to determine it's supposed to use that specific port. wc -l counts lines and have nothing to do with port numbers. So
$ command | wc -lReturns the number of lines outputted by "command" (whatever before pipe). In your case, "strings $(which jabref)" outputs 56 lines.
"sudo lsof -i" as a sudoer user, or "lsof -i" as root (elevated privileges required to trace used ports) should list processes/commands using ports, for both listening and established. OR just "sudo ss -pt state listening" without specifying a source port to see all the listening port to use used ports, then compare it to 'whatever port number' jabref's documentations says the software uses.
Also, starting jabref with strace, using the network filter, something like "sudo strace -f -e trace=network $InsertHereWhateverCommandYouUseToStartJabref", should help you to see what port it's trying to use.