投稿練習(73, 0)
 メ-ル希望(3, 0)
 障害情報(18, 0)
 雑談(871, 0)
 業務報告(284, 0)
 VineseedにZope(623, 0)
 Zope27使おう(6, 0)
 ImgBBS(14, 0)
 会員専用(0, 0)
 ぼやき場所(27, 0)
 メモ(32, 0)
 eclipse(6, 0)
  

業務報告

業務報告部屋を作ってみました。

投稿画面の表示を 

検索文字 

お名前  EMail 
 左に表示されている数値を入力してください 


35 owa 2003年 3月16日 23時49分 Id=owa

>>34 このIPファイルが見付からなかった
ちゃんとありました↓
/var/zope26/var/counter.***.***.counter.ip
 
しかも一日の来客の IP がすべて出てきます。これログ見るより簡単ですね^^



34 owa 2003年 3月16日 23時25分 Id=owa

>>27 リモートアドレスを「.」で分割して左シフトしてる
すいません無責任モードでした
 
def ignore_ip(self, REQUEST):
このメソッドは、FSCounter の Edit タブで出てくる [Addresses to ignore] 欄に対応しているところですよね
シフト演算は URL文字列を整数型にしているのだと思います
十進数だと解かり難いので 16進数で表すと
URL が "A0.B1.C2.D3" とすれば、シフト演算後の整数値は 0xA0B1C2D3 になります
# 30 malo さんが既に解説しておられますね;;
 
で、本来の話に戻って、同一IPの訪問者かどうかは
[IP Tracking] または [Cookie?] チェックボックスでおこなっています
ソースは FSCounter.py で場所は "def increment(self, REQUEST):" メソッドの中です。
 
[IP Tracking] 対応部分は
if hasattr(self,'ip_tracking') and self.ip_tracking:
以下の部分で、IP 毎にファイルこしらえて、それと比較しているようです
(ただ自分のところでは、このIPファイルが見付からなかったので、間違っているかも;;)
 
[Cookie?] 対応部分は
elif self.cookie_yn:
以降で、クッキーがなければ++1して、クッキーを設定しているようです
 
# なんか解かって書いているように見えますが、急いでソース見たので間違いだったらすいません



33 kiyo 2003年 3月16日 21時26分 Id=kiyo

>>32 int(rAdrSplit[0])<<24の間違いではないでしょうか?
typoでした。
 
何度も有難うございます。
見るに私の解釈が間違ってるみたいですねぇ。
 
成る程pythonのidleで実行したらよかったんだ。
ご迷惑をおかけしました。



32 malo 2003年 3月16日 21時12分 Id=malo

kiyoさんは,int(rAdrSplit[0]<<24)と書きましたが,これでは型が合わずエラーになります。
なのでint(rAdrSplit[0])<<24の間違いではないでしょうか?
 
以下に実際にPythonで試してみました。若干私の解釈と違ってました。
 
Python 2.2.2(SJIS enhanced) (#37, Oct 15 2002, 15:30:03) [MSC 32 bit (Intel)] on win32
Type "copyright", "credits" or "license" for more information.
IDLE 0.8 -- press F1 for help
>>> str="00000001.00000010.00000011.00000100"
>>> AdrSplit=string.split(str,'.')
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in ?
    AdrSplit=string.split(str,'.')
NameError: name 'string' is not defined
>>> import string
>>> AdrSplit=string.split(str,'.')
>>> print AdrSplit
['00000001', '00000010', '00000011', '00000100']
>>> print AdrSplit[0]<<24
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in ?
    print AdrSplit[0]<<24
TypeError: unsupported operand type(s) for <<: 'str' and 'int'
>>> print int(AdrSplit[0])<<24
16777216
>>> print int(AdrSplit[1])<<16
655360
>>> print int(AdrSplit[2])<<8
2816
>>> print int(AdrSplit[3])
100
>>> print (int(AdrSplit[0])<<24+int(AdrSplit[1])<<16+int(AdrSplit[2])<<8+int(AdrSplit[3]))
0
>>> print ((int(AdrSplit[0])<<24)+(int(AdrSplit[1])<<16)+(int(AdrSplit[2])<<8)+int(AdrSplit[3]))
17435492
>>>



31 kiyo 2003年 3月16日 21時2分 Id=kiyo

>>30 maloさん有難う。
 
私の持っているテクニカルリファレンスには、左シフトの解説はないのですが、
maloさんの例題を元に、いままでの知識で、思うに。
 
rAdrSplit[0]  = 00000001
rAdrSplit[0] << 1 = 00000010
rAdrSplit[0] << 2 = 00000100
rAdrSplit[0] << 3 = 00001000
rAdrSplit[0] << 4 = 00010000
rAdrSplit[0] << 5 = 00100000
rAdrSplit[0] << 6 = 01000000
rAdrSplit[0] << 7 = 10000000
rAdrSplit[0] << 8 = 00000000
ここでゼロになると思っていた。
pythonの左シフトは違うのでしょうか?
 
# 後で気がついたのですが、intって8ビットじゃないよねぇ(アホだあ、僕)



30 malo 2003年 3月16日 20時30分 Id=malo

>>29 FSCounter
 
これは,文字列のIPアドレス(2進数)を整数に変換していると思います。
 
例えば,
 IPアドレス(文字列)="00000001.00000010.00000011.00000100" =(10進表示)1.2.3.4
 
>rAdrSplit = string.split(self.REQUEST.REMOTO_ADDR, '.')
 rAdrSplit[0]="00000001",rAdrSplit[1]="00000010",rAdrSplit[2]="00000011",rAdrSplit[3]="00000100",
 ここまでは文字列です。
 
>rAdrInt = (int(rAdrSplit[0]<<24) + (int(rAdrSplit[1]<<16)****略
 rAdrSplit[0]<<24="00000001000000000000000000000000"
 rAdrSplit[1]<<16=" 000000100000000000000000"
 rAdrSplit[2]<< 8=" 0000001100000000"
 rAdrSplit[3]<< 0=" 00000100"
 
これを整数にすると
 rAdrSplit[0]<<24=1*2^24
 rAdrSplit[1]<<16=2*2^16
 rAdrSplit[2]<< 8=3*2^ 8
 rAdrSplit[3]<< 0=4
これらをすべて足すと
 rAdrSplit = 1*2^24 + 2*2^16 + 3*2^8 + 4
 
たぶん,こんなことをしてるのではないでしょうか?
あんまりカウンタのロジックとは関係ないと思います。



29 kiyo 2003年 3月16日 19時7分 Id=kiyo

>>27 FSCounter のソース盗んだらどうですか?
 
owaさんの指示に従い盗もうとソース覗くが、わからん(爆笑)
カウンターなんて簡単だろうと思いきや、リモートアドレスを「。」で分割して左シフトしてる。
さらに&なんかしてる。
なんじゃー
 
多分私が間違ってる事は明白ですが、
rAdrSplit = string.split(self.REQUEST.REMOTO_ADDR, '.')
rAdrInt = (int(rAdrSplit[0]<<24) + (int(rAdrSplit[1]<<16)****略
rAdrSplit[0]<<24は 255までの数値を左シフト24回もしたらゼロにしかナランだろうに?
なにやってんだろう???
 
# また自信なくした。



28 kiyo 2003年 3月16日 17時29分 Id=kiyo

>>27
 
例えば、同一IPの訪問者が、接続して一旦閉じ、又接続に来た場合はカウント2になるのだろうか?
と言うような単純な事なんですが、普通はどうやるのだろう。



27 owa 2003年 3月16日 17時18分 Id=owa

>>26 同IP時に、カウントする条件がよく解かってない
FSCounter のソース盗んだらどうですか?
そういう話では無い?



26 kiyo 2003年 3月16日 13時58分 Id=kiyo

>>25
ShowCounterと言うDtmlMethod作ってみた。
同IP時に、カウントする条件がよく解かってない。
おしえて(こればっかでスマヌ)