[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.
--
川村 尚生