On Mon, Nov 05, 2001 at 10:24:34PM +0100, Philipp Schulte wrote: >Thats not true. nmap shows "open" ports which means that something is >listening on them. If I connect from localhost:1024 to >www.debian.org:80 that does not mean that my port 1024 is open. It >doesn't accept connections. >I actually think that the explanation from Moritz was correct. I have >not seen this kind of behaviour with recent versions of nmap.
Yes, that's true. I would say it was a problem with previous versions of libc / kernel / don't know what rather than nmap. I wrote a simple program which endlessly tries to connect to port 60000 (of course nothing is listening on that port). here it follows : --- #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <errno.h> #include <netdb.h> #include <string.h> int main() { int sock; struct sockaddr_in server_addr; struct hostent* host; int retval; int ile = 0; do { sock = socket (AF_INET, SOCK_STREAM, 0); host = gethostbyname ("localhost"); memset (&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons (60000); memcpy (&server_addr.sin_addr, host->h_addr_list[0], sizeof(server_addr.sin_addr)); ile++; retval = connect (sock, (struct sockaddr*)&server_addr, sizeof (struct sockaddr_in)); printf ("[%d] trying to connect -> %d\n",ile,retval); close (sock); /* sleep (1); */ } while (retval == -1); printf ("[%d] trying to connect -> %d\n",ile,retval); return 0; } --- nothing special, isn't it ? when run in my last potato installation (2.2.x kernel) it ends with : ... [6123] trying to connect -> -1 [6124] trying to connect -> -1 [6125] trying to connect -> 0 The numbers are rather random, but near couple of thousands. If I put 'sleep(1);' (or some delay, let's say bigger than 1/100sec) at the end of each loop, it will run perfectly normal. It also works normal on kernels 2.4.x with libc 6.1, for example on my current debian distribution. I would suspect that what it really does is connecting to _itself_. Imagine that in the 6125-th run of the loop kernel assigns 60000 as the source port to 'connect' call - why not ? Or it assigns it a little bit earlier, and this port stays binded, because kernel has no time to free it ? Or maybe I am missing something, then show me please errors in the program above :) best regards, -- Marcin Bieńkowski -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]