Jeff Abrahamson on 4 Mar 2004 16:31:02 -0000 |
On Thu, Mar 04, 2004 at 11:02:58AM -0500, gabriel rosenkoetter wrote: > [29 lines, 198 words, 1094 characters] Top characters: teonaisr > > On Thu, Mar 04, 2004 at 10:40:13AM -0500, Martin DiViaio wrote: > > Anyone know of an easy way to find an open, non-priviledged TCP port in > > bash? > > > > I could troll through the output from netstat and then pick a port that > > isn't listed, but I'm hoping there is an easier solution. > > I don't think there is, since bash doesn't (or, at least, I sure > HOPE it doesn't) have any networking code internal to it. netstat or > lsof would be your best bets. It does if you compile with --enable-net-redirections. The bash man page doesn't mention that this is a compile-time option, but here's what it says in bash(1): Bash handles several filenames specially when they are used in redirec- tions, as described in the following table: /dev/fd/fd If fd is a valid integer, file descriptor fd is dupli- cated. /dev/stdin File descriptor 0 is duplicated. /dev/stdout File descriptor 1 is duplicated. /dev/stderr File descriptor 2 is duplicated. /dev/tcp/host/port If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket. /dev/udp/host/port If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a UDP connection to the corresponding socket. A failure to open or create a file causes the redirection to fail. On the other hand, some degree of decorum is preserved for Debian users. In /usr/share/doc/bash/README.Debian.gz, we can read many interesting items, including this: 9. Why is bash configured with --disable-net-redirections? It can produce completely unexpected results. This kind of feature should not be part of a shell but a special. tool. And that tool has existed for years already, it's called netcat. > Why do you want to do this, though? Binding to "0" gets you an > unused socket which you then own, meaning there's no chance for a > race condition between when you get the number and start using the > socket. Hmm, that's cool, I didn't know that. Is that a bash-ism, a linux-ism, or can I really say this: sock = socket(AF_INET, SOCK_DGRAM, 0); memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = htonl(INADDR_ANY); saddr.sin_port = 0; /* Gabe said I could do this */ ret = bind(sock, (struct sockaddr *)&saddr, sizeof(saddr)); and expect it to work on most unices? > What problem are you trying to solve? He's trying to waste my time, because he knows I've been doing socket programming this week and am easily distracted by socket questions! ;-) -- Jeff Jeff Abrahamson <http://www.purple.com/jeff/> GPG fingerprint: 1A1A BA95 D082 A558 A276 63C6 16BF 8C4C 0D1D AE4B Hi! I'm a .signature virus! Copy me into your ~/.signature to help me spread! Attachment:
signature.asc
|
|