[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:11470] Re: port assign rule.



> > # カーネル見てるんですが、どこでこれやってるか分からない…。(;_;)
> 
> (IPV4なら)net/ipv4/af_inet.cのinet_bind()の中の
> 
> |	if (snum < PROT_SOCK && !capable(CAP_NET_BIND_SERVICE))
> |		return(-EACCES);
> 
> というコードです。PROT_SOCKはinclude/net/sock.hで1024に
> defineされています…ということではなくて、capable()が何をやっ
> ているかということですか? それは結構難しいです。^^;

じゃなくて、1024以上の空いているポートを自動的に探すのはどこ
かということかな? それなら、上記コードのすぐ上の

|	if (snum == 0) 
|		snum = sk->prot->good_socknum();

からたどってみましょう。
# inet_autobind()という関数もあったりする。

ところで、

むつみさん
>>> 記憶では、ある値を閾値にしてユーザ用に割り当てられるポートが
>>> あったのですが、1000以上でしたか。
>
> 1024より大きい(1025 以上)だったはず。

と書かれていて、たしかにこう書いてある本もみかけるのですが、
ソースを読めば、1024も一般ユーザが使えますね。念のために
http://www.iana.org/を見に行ったら

| The port numbers are divided into three ranges: the Well
| Known Ports, the Registered Ports, and the Dynamic and/or
| Private Ports. This file contains the listing of all
| registered port numbers.
| 
| The Well Known Ports are those from 0 through 1023. 
| 
| The Registered Ports are those from 1024 through 49151. 
| 
| The Dynamic and/or Private Ports are those from 49152 through 65535. 

と書かれてあったんでやっぱり1025というのは単なる間違いですね。
ついでにRFC1700を読むとこう書いてあったのですが、1024未満っ
ていうのはPOSIXあたりで決まっている(or 決まる)のでしょうか?

| There is the restriction that only "superuser" on BSD
| derived systems such as SunOS can bind to a port number that
| is less than 1024.  So programs have used this information
| in the past to identify whether or not the service they were
| talking to was started by the superuser on the remote
| system.  Making this assumption is dangerous because not all
| system enforce this restriction.

-- 
川村 尚生