How to know when it's possible to bind a socket on an unprivilegedport?

G

Giampaolo Rodola'

Hi,
For a purpose of testing I need a function which could tell me whether
it is possible to bind sockets on privileged ports or not.
I wrote down this simple function. It seems reasonably working to me
but I'd like to hear your opinion first.

Thanks in advance.


import socket, errno

def bind_on_privileged_ports(port=21):
"""Return True if it is possible to bind sockets on privileged
ports (< 1024)."""
try:
s = socket.socket()
s.bind(("", port))
except socket.error, err:
if err[0] == errno.EACCES:
return False
s.close()
return True


--- Giampaolo
http://code.google.com/p/pyftpdlib/
 
G

Giampaolo Rodola'

Hi,
For a purpose of testing I need a function which could tell me whether
it is possible to bind sockets on privileged ports or not.
I wrote down this simple function. It seems reasonably working to me
but I'd like to hear your opinion first.

Thanks in advance.

import socket, errno

def bind_on_privileged_ports(port=21):
    """Return True if it is possible to bind sockets on privileged
    ports (< 1024)."""
    try:
        s = socket.socket()
        s.bind(("", port))
    except socket.error, err:
        if err[0] == errno.EACCES:
            return False
    s.close()
    return True

Just to clarify: I don't really care *which* port to use for binding
the socket. I just need to try to bind a socket on a free random
privileged port and return True if that has been possible.


--- Giampaolo
http://code.google.com/p/pyftpdlib/
 
G

Giampaolo Rodola'

Another way (probably more reliable):


def bind_on_privileged_ports():
"""Return True if it is possible to bind sockets on privileged
ports (< 1024)."""
for port in range(1, 1024)[::-1]:
print port
try:
s = socket.socket()
s.bind((HOST, port))
except socket.error, err:
if err[0] == errno.EACCES:
return False # speedup
else:
s.close()
return True
else:
s.close()
return False



--- Giampaolo
http://code.google.com/p/pyftpdlib/
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,077
Latest member
SangMoor21

Latest Threads

Top