I created web socket test app with tornado server and static html page for check connection to this server.
When I try to connect from localhost to websocket, it works fine. if I try to connect from remote IP, I get "connection closed by timeout".
netstat -lnp gives me next result:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 14837/python2.7
Related
When I run my spring boot project through IDE works fine and perfect,
But when I try to deploy it on Digital Ocean's droplet it throws an Exception :
SQLNonTransientConnectionException: Socket fail to connect to host:address=(host=127.0.0.1)(port=3308)(type=primary). Connection refused
And i'am pretty sure about the credential ; It already went fine on my IDE .
This is not a credential issue, "Connection refused" is the java standard message when a socket fails to establish, so the problem is before authentication.
The problem is either nothing is listening on the IP:Port you are trying to connect to or the port is blocked by a firewall.
check that loopback 127.0.0.1 is defined with command like :
ip addr show lo
run
sudo netstat -tnlp | grep :3308
to ensure that something is listening on port.
expected answer are like :
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 76468/mariadbd
tcp6 0 0 :::3308 :::* LISTEN 76468/mariadbd
I've read all the threads with similar questions, but couldn't find an answer.
Mosquitto config:
listener 1883 127.0.0.1
protocol mqtt
listener 9001 127.0.0.1
protocol websockets
log output:
1567705166: mosquitto version 1.6.2 starting
1567705166: Config loaded from C:\Program Files (x86)\mosquitto\mosquitto.conf.
1567705166: Opening ipv4 listen socket on port 1883.
1567705166: Opening websockets listen socket on port 9001.
1567705166: Opening websockets listen socket on port 1883.
Chrome devtools:
mqttws31.js:977 WebSocket connection to 'ws://127.0.0.1:9001/mqtt' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
I've tried many things but nothing helped:
Trying websockets only
Trying another port (1883 and 9001 instead of 8080)
Switching off Windows firewall
If I change the config file to:
#listener 1884 127.0.0.1
#protocol mqtt
#listener 1883 127.0.0.1
protocol websockets
Mosquitto listens for websockets on port 1883 but logfile reads:
1567706943: mosquitto version 1.6.2 starting
1567706943: Config loaded from C:\Program Files (x86)\mosquitto\mosquitto.conf.
1567706943: Opening websockets listen socket on port 1883.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
1567706943: Error in poll: No error.
changing config to:
protocol websockets
listener 8080 127.0.0.1
protocol mqtt
Gives me a logfile that says:
1567707450: mosquitto version 1.6.2 starting
1567707450: Config loaded from C:\Program Files (x86)\mosquitto\mosquitto.conf.
1567707450: Opening ipv4 listen socket on port 8080.
1567707450: Opening websockets listen socket on port 1883.
(no extra crap)
After following up on answer no 1:
config:
protocol websockets
listener 1883 127.0.0.1
protocol mqtt
console:
WebSocket connection to 'ws://127.0.0.1:1883/mqtt' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET
log:
1567716915: mosquitto version 1.6.2 starting
1567716915: Config loaded from C:\Program Files (x86)\mosquitto\mosquitto.conf.
1567716915: Opening ipv4 listen socket on port 1883.
1567716915: Opening websockets listen socket on port 1883.
1567716920: New connection from 127.0.0.1 on port 1883.
1567716920: Socket error on client <unknown>, disconnecting.
1567716920: New connection from 127.0.0.1 on port 1883.
1567716920: Socket error on client <unknown>, disconnecting.
5492: Error in poll: No error.
1567715492: Error in poll: No error.
1567715492: Error in poll: No error.
1567715492: Error in poll: No error.
1567715492: Error in poll: No error.
1567715492: Error in poll: No error.
Tried another websockets client (https://www.eclipse.org/paho/clients/js/utility/) --> Failed to connect: AMQJSC0001E Connect timed out.
I can't get websockets to work with any configuration / port...
Can anyone confirm that Websockets in Mosquitto (32bit version 1.6.2 or 1.6.4) for Win10 are working ?
Your first config file won't work because you have both native MQTT and Websockets both trying to listen on port 1883. (this is because the default listener starts on port 1883), Not 100% sure how this is possible unless it's some strange IPv6 thing on Windows.
The second, is just changing the default listener protocol to Websockets, which in theory should work, assuming you try and connect to port 1883 from the webpage.
The third one makes the default listener on port 1883 Websockets and native on 8080. Again should work assuming you are trying to connect to 1883
The simplest config to enable Websockets should look like this:
listener 9001 127.0.0.1
protocol websockets
This will leave the native default listener alone on port 1883 (listening on all interfaces, use bind_address 127.0.0.1 before the listener line to make it only listen on localhost) and start the Websocket listener on port 9001
This turned out to be quite the challenge.
First I tried to get things working using an online broker and client. Still not working. I then switched to another computer and everything was working fine.
Switching back to the original computer I decided to test if websockets where working at all by going to https://www.websocket.org/echo.html
From that moment on everything started to work. First the online broker and client and then also the local server and clients. I have no idea why...
C:\Users\Kyle>telnet 10.0.0.1 25
The response that I get is:
Connecting To 10.0.0.1...Could not open connection to the host, on port 25: Connect failed
Some ISP will block port 25 due to spamming concern. Consider to try with port 587 instead.
10.0.0.1 is a private IP address. You can only connect directly to that IP address if there is a server at that address on your local network. You should verify that there is a server at that IP address, and that the server is running a program that is listening for connections on port 25.
I'm trying to connect to a WebSocket server (PHP / Wrench) running on my webserver.
The configuration of the server looks like this:
$server = new \Wrench\Server("wss://localhost:8443");
$server->registerApplication('app',
new \Wrench\Application\EchoApplication());
$server->run();
I'm using port 8443 because I can't use 80 or 443 (Permission denied). The domain uses HTTPS so I have to use the wss: protocol.
I have no problem connecting to the PHP server when I run the script on my local machine (I just have to replace wss: by ws:).
When I run the server via SSH on my remote webserver, it seems to run correctly, but trying to connect to it via JS with the following call doesn't work:
var ws = new WebSocket("wss://dev.mydomain.net:8443/app");
I get an "Error in connection establishment: net::ERR_CONNECTION_REFUSED."
On my webserver panel control, the 8443 port (TCP) is open (in and out). When the PHP server is running, the command netstat -a | grep 8443 gives the following output, which I think should confirm it's open:
tcp 0 0 localhost:8443 *:* LISTEN
Is there an obvious detail I'm missing here?
I finally found a solution: instead of setting the URI of the server to localhost, I had to use 0.0.0.0. Now it works perfectly when I'm using HTTP (there's another problem when using HTTPS, but at least I have more information at this point).
I went through all these error questions that I could find on SO and I've done everything that it appears I should do. Still, I get connection refused when I telnet to port 25
This is what is asked for in other questions:
netstat-an | grep LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:53045 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 :::111 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::443 :::* LISTEN
tcp 0 0 :::52266 :::* LISTEN
So, port 25 is listening. Next, can I telnet to 25 on localhost? Yes. No problem. I can do localhost and I can do it with 127.0.0.1 and I can do it with the proper IP address. As long as I am on the machine itself, I can telnet to port 25.
Next, the EC2 firewall. There are two levels, iptables and the EC2 security zone. I made sure iptables and ip6tables were shut down. Service shows that both are "Firewall is not running". I checked the EC2 security zone. It shows:
25 tcp 0.0.0.0/0
So, it is allowing all traffic to port 25.
Still, I get connection refused when I telnet to port 25.
I continued. I checked /etc/hosts.allow and /etc/hosts.deny. Both are empty.
I continued. I looked in the mail folder. The domain is in local-host-names (which doesn't matter since I never get to the point of entering a recipient email address). I don't see anything about blocking or allowing hosts. Perhaps there is something buried in the cryptic sendmail.cf file. So, I wanted to ensure that sendmail was definitely listening with
lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sendmail 11457 root 4u IPv4 830292 0t0 TCP *:smtp (LISTEN)
Same as netstat. Listening on all devices on port smtp (25).
So, I am at a loss. Why would I get connection refused on port 25? It isn't unable to reach server. It isn't that it is not listening. It is clearly that it is listening and refusing connections.
The problem here is that there are two issues:
1) Many ISPs block outbound port 25 requests. So, it is rather common that telnet somedomain.com 25 will fail and report something like "denied" or "unreachable."
2) Proper programs that go out on port 25 are mail programs. A mail program is designed to send email to your email service, which then uses the MX record for the domain name to deliver the email. What I found is that when you register a domain name with Network Solutions and set "All" IP addresses to be a certain address, they do NOT set the MX record address. That remains set to Network Solutions' mail server. So, if someone uses a proper email program to hit your domain name, it will go to mx.yourdomain.com, which may not be your server.
In my case, I had to manually set the IP address for the mx record with Network Solutions. Then, I magically started getting emails.
For those that don't know how to check MX records, in Linux, you can run dig domain.name MX. However, it isn't your MX record setting that matters. It is your mail server's setting. For example, if my computer says the mx record is 12.34.56.78 and I use GMail and Google says the mx record is p.ctmail.com, then sending email through GMail will fail.