|
|
業務報告
業務報告部屋を作ってみました。
>>34 このIPファイルが見付からなかった ちゃんとありました↓ /var/zope26/var/counter.***.***.counter.ip しかも一日の来客の IP がすべて出てきます。これログ見るより簡単ですね^^
>>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して、クッキーを設定しているようです # なんか解かって書いているように見えますが、急いでソース見たので間違いだったらすいません
>>32 int(rAdrSplit[0])<<24の間違いではないでしょうか? typoでした。 何度も有難うございます。 見るに私の解釈が間違ってるみたいですねぇ。 成る程pythonのidleで実行したらよかったんだ。 ご迷惑をおかけしました。
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 >>>
>>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ビットじゃないよねぇ(アホだあ、僕)
>>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 たぶん,こんなことをしてるのではないでしょうか? あんまりカウンタのロジックとは関係ないと思います。
>>27 FSCounter のソース盗んだらどうですか? owaさんの指示に従い盗もうとソース覗くが、わからん(爆笑) カウンターなんて簡単だろうと思いきや、リモートアドレスを「。」で分割して左シフトしてる。 さらに&なんかしてる。 なんじゃー 多分私が間違ってる事は明白ですが、 rAdrSplit = string.split(self.REQUEST.REMOTO_ADDR, '.') rAdrInt = (int(rAdrSplit[0]<<24) + (int(rAdrSplit[1]<<16)****略 rAdrSplit[0]<<24は 255までの数値を左シフト24回もしたらゼロにしかナランだろうに? なにやってんだろう??? # また自信なくした。
>>27 例えば、同一IPの訪問者が、接続して一旦閉じ、又接続に来た場合はカウント2になるのだろうか? と言うような単純な事なんですが、普通はどうやるのだろう。
>>26 同IP時に、カウントする条件がよく解かってない FSCounter のソース盗んだらどうですか? そういう話では無い?
>>25 ShowCounterと言うDtmlMethod作ってみた。 同IP時に、カウントする条件がよく解かってない。 おしえて(こればっかでスマヌ)
|
|