Hi,
I was reading an article about 'honeytrapping' ports to slow down port scanners, and it made reference to Perl, but I was wondering, how feasible in Python is a script that waits for requests to (normally unused) ports, and then malforms a response to those requests?
This is similar to what a web server or any other type of network server does. Yes, you certainly can do this in Python.
I'm aware this is illegal in some US states, but this is more of a 'how would you do that' scenario rather than 'I need to do this'.
Sockets tend to use localhost? Java interpreters and Python interpreters all seem to call localhost.
localhost is the name of a computer, in particular the computer the program is running on. Sort of like 'self' in a way. To identify a port you need a host name and a port number. localhost is a host name.
So, do sockets use ports? Or, do ports use sockets? Or, do programmes create sockets which can utilise ports? If so, can you access a port directly in Python?
'port' is a low-level concept that is pretty closely tied to the actual communications protocol (TCP/IP, for what you want to do). A socket is a programming interface to a port. Sockets use ports. Ports don't use sockets.
Programs create sockets either to connect directly to a port on a remote computer or to listen for connections. The first kind is a client socket, for example to fetch a web page from a web server you open up a socket to port 80 on the server. The second kind is a server socket, the web server is listening for clients to connect on port 80.
I always wanted to be able to the nitty gritty stuff like accessing a particular port, but I always thought I'd have to learn Cpp to do it.
You can definitely do this in Python.
The socket module gives you direct access to sockets. You probably don't want to use this except as a learning experience.
I can't find good tutorial material on the web, but some info is at http://www.amk.ca/python/howto/sockets/
Generally you will want to program at a higher level than raw sockets. There are *lots* of Python libraries and frameworks to do this.
There are three fundamentally different ways to write a server. A synchronous server is the simplest, but it only handles one request at a time so it is not really practical. An asynchronous server handles multiple requests by polling the active sockets to see which ones are ready for service. A threaded server creates a separate thread for each active socket.
asyncore and asynchat are relatively simple libraries that let you create an asynchronous server. My understanding is that they are kind of limited and not really recommended for production use. Twisted is the king of Python asynchronous servers, if you are going to do much server writing it is probably worth learning it. Medusa is another robust Python async server.
http://twistedmatrix.com/
http://www.amk.ca/python/code/medusa.html
http://mail.python.org/pipermail/python-list/2003-January/137318.html
SocketServer, BaseHTTPServer, SimpleHTTPServer and CGIHTTPServer all let you create simple synchonous and threaded servers.
If you are looking for HTTP servers specifically, there are lots, see here for a list: http://www.python.org/moin/WebProgramming
Regards,
Liam Clarke
_______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
