socketstcpraspberry-piclient-serverufw

Problem with socket connect between raspberry (client) and host


I've a Raspberry Pi 3 Model B. I would like to send data from raspberry to host. I use python program with socket package.

I've problem when my raspberry is client and my laptop is server. I got next error:

OSError: [Errno 113] No route to host 

Code client.py:

import socket

HOST = '192.168.0.107'    
PORT = 5353

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    
        
    s.send(b'Hello, world')
    data = s.recv(1024)
    print('Received', repr(data))

server.py:

hostname  = socket.gethostname()
HOST = socket.gethostbyname(hostname)
print(HOST)            
PORT = 5353

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('', PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        print(conn)
        while True:
            data = conn.recv(1024)
            print(data)
            if not data: break
            conn.sendall(data)

ifconfig on server:

enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.107  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::ab65:70bf:9921:1d4b  prefixlen 64  scopeid 0x20<link>
        ether 18:31:bf:51:9d:9c  txqueuelen 1000  (Ethernet)
        RX packets 213759  bytes 177479962 (169.2 MiB)
        RX errors 0  dropped 27  overruns 0  frame 0
        TX packets 144335  bytes 25485658 (24.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 43423  bytes 3729254 (3.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 43423  bytes 3729254 (3.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

When I swap them i.e. raspberry becomes a server then all messages are send

raspberry: sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
5353                       ALLOW       Anywhere                  
5353/tcp                   ALLOW       Anywhere                  
SSH (v6)                   ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
5353 (v6)                  ALLOW       Anywhere (v6)             
5353/tcp (v6)              ALLOW       Anywhere (v6)  

raspberry: netstat -lntu

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::53                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
udp        0      0 0.0.0.0:33841           0.0.0.0:*                          
udp        0      0 0.0.0.0:53              0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 0.0.0.0:631             0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp6       0      0 :::48624                :::*                               
udp6       0      0 :::53                   :::*                               
udp6       0      0 :::5353                 :::*                            


I think my problem is that port 5353 is not open on tcp. But the command

sudo ufw allow 5353/tcp 

does not help.

Also, I reset my ufw's rules:

sudo ufw reset 

added new rules like

sudo ufw allow SSH
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 5353/tcp 

and I disabled and enabled ufw. It's not worked.


Solution

  • SOLVED:

    My host machine is Fedora. Fedora has its own firewall: link

    My action in host:

    sudo firewall-cmd --state
    >> running
    firewall-cmd --list-ports
    >>   [empty]
    sudo firewall-cmd --add-port=5353/tcp  --timeout 15m
    >> success
    firewall-cmd --list-ports
    >> 5353/tcp
    

    Then I launched the client on raspberry and got the data. Yippee!