得到客户端来源IP,有则返回IP ,无则返回.NULL.
*--只要发布到IIS即可测试
*http://ip/ctl_IPService.fsp?proc=getclientip
Define Class ctl_IPService As Session
Procedure getClientIP
Local cResult,lcReturn
cResult=getRequestHeader("HTTP_X_FORWARDED_FOR")
&&可能有代理
lcReturn=""
If (At(".",cResult)<=0) &&沒有".",非 IPv4 格式
lcReturn= ""
Else
If At(",",cResult) > 0
Alines(myarray,cResult,",")
For lni=1 To Alen(myarray)
lctmp = Substr(myarray[lni],1, 8)
If !This.isip(lctmp)
lcReturn=""
Exit
Endif
If Left(lctmp,3)=="10." Or Inlist(lctmp,"192.168","172.16.")
lcReturn= ""
Exit
Endif
lcReturn = lctmp
Exit
Endfor
Endif
Endif
If Empty(lcReturn)
lcReturn=getRequestHeader("REMOTE_ADDR")
oFrmMain.log("我获取:"+lcReturn)
Endif
Return IIF(EMPTY(lcReturn),.null.,lcReturn)
Endproc
Procedure IsIP
Lpar cip,lni
Alines(myarray2,cip,".")
If Alen(myarray2)!=4
Return .F.
Endif
For lni=1 To Alen(myarray2)
lntmp=Val(myarray2[lni])
If lntmp>255
Return .F.
Endif
Endfor
Endproc
Enddefine
这个功能结合白名单使用可能比较好。因为现实中有很多代理服务器或客户端故意跳板是可以隐藏掉自己的IP的。