Trouble initiating a TCP connection in Python--blocking and timing out
Question: For a class project I'm trying to do some socket programming Python but
running into a very basic issue. I can't create a TCP connection from my
laptop to a lab machine. (Which I'm hoping to use as the "server") Without
even getting into the scripts I have written, I've been simply trying
interpreter line commands with no success. On the lab machine
(kh4250-39.cselabs.umn.edu) I type the following into Python:

    
    
    from socket import *
    sock = socket()
    sock.bind(('', 8353))
    sock.listen(5)
    sock.accept()
    

And then on my laptop I type:

    
    
    from socket import *
    sock = socket()
    sock.connect(('kh4250-39.cselabs.umn.edu', 8353))
    

At which point both machines block and don't do anything until the client
times out or I send a SIGINT. This code is pretty much exactly copied from
examples I've found online and from Mark Lutz's book Programming Python (using
'' for the server host name apparently uses the OS default and is fairly
common). If I run both ends in my computer and use 'localhost' for the
hostname it works fine, so I suspect it's some problem with the hostnames I'm
using on one or both ends. I'm really not sure what could be going wrong on
such a simple example. Does anyone have an idea?


Answer: A good way to confirm whether it's a firewall issue or not is to perform a
`telnet` from the command-line to the destination host in question:

    
    
    % telnet kh4250-39.cselabs.umn.edu 8353
    Trying 128.101.38.44... 
    

And then sometime later:

    
    
    telnet: connect to address 128.101.38.44: Connection timed out
    

If it just hangs there at `Trying` and then eventually times out, chances are
the connection to the remote host on that specific port is being blocked by a
firewall. It could either be at the network layer (e.g. a real firewall or a
router access-list) or at the host, such as iptables or other host-based
filtering mechanisms.

Access to this lab host might only be available from within the lab or the
campus network. Talk with your professor or a network administrator or someone
"in the know" on the network to find out for sure.

