c/s结构下,怎样获得当前用户(客户端)的IP地址?谢谢!

gostesee 2003-08-26 10:41:27
c/s结构下,怎样获得当前用户(客户端)的IP地址?请给出源代码或数据库,谢谢!我的邮箱 chxjmail@btamail.net.cn
...全文
79 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
briliang 2003-08-29
  • 打赏
  • 举报
回复
我单位很需要lotus安全监控的产品,可以联系吗?
briliang@sina.com
gostesee 2003-08-27
  • 打赏
  • 举报
回复
呵呵,解决了,向ntko(磁化水)学习,也谢谢楼上各位。
ntko 2003-08-26
  • 打赏
  • 举报
回复
有关dsapi你可以看一下相关文档,去ibm搜索lotus c API reference和userguide,
讲的比较详细。
但是,如果要完成你的功能,我建议你没必要写API,
可以在as400上通过ip协议来配置,不知可否?

因为我们有一个产品是关于lotus 安全的,可惜是在win2k上运行的,能够实现你说的功能,
还可以限制某人只能在某台机器上使用客户端,这样就必须写API了。

只是我不太方便公开源代码。
gostesee 2003-08-26
  • 打赏
  • 举报
回复
请ntko(磁化水)讲述大概api使用,我只知道得到客户端机器名称,可怎样把机器名称转化成ip呢?
gostesee 2003-08-26
  • 打赏
  • 举报
回复
domino运行在as400上,想获得客户端ip运用是防止不是局域网内部机器就不允许访问数据库,即使拥有合法的id也不行。
ntko 2003-08-26
  • 打赏
  • 举报
回复
这个问题用一个Notes数据库是解决不了的。必须使用DSAPI来解决。
请具体描述一下你的应用。
ntko 2003-08-26
  • 打赏
  • 举报
回复
或者:
以下代理可以获得客户端IP地址,并将其放到选中文档的IPadddress域:
mport lotus.domino.*;
import java.net.*;

public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
Document doc = agentContext.getDocumentContext();
if (doc != null)
{
InetAddress local = InetAddress.getLocalHost();
doc.replaceItemValue("IPAddress", local.getHostAddress());
doc.save();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
ntko 2003-08-26
  • 打赏
  • 举报
回复
daluoboequalto(大萝卜) :你有其它方法吗?
chenyg2000(icerain) :C/S方式用Java代理不能实现。

gostesee () :下面代码仅供参考(win2k下的)

首先注册一个事件:
STATUS LNPUBLIC MainEntryPoint(void)
{
STATUS err;

err = EMRegister( EM_SECAUTHENTICATION,
EM_REG_AFTER,
ExtCallback,
0, ®EMId1);

return err;

}

下面是事件回调函数:(当Notes客户端链接时发生)
STATUS LNPUBLIC ExtCallback( EMRECORD FAR * theData )
{
VARARG_PTR argPtr;
STATUS sError = ERR_EM_CONTINUE;

argPtr = theData->Ap;

/* do nothing if there is an error. */
if ( theData->Status )
{
return theData->Status;
}


switch (theData->EId)
{

case EM_SECAUTHENTICATION:

/* declare the arguments */

WORD wEvent = 0;
SESSIONID SessionId;
char *pRemoteName = NULL;
DWORD dwFlags = 0;
WORD wNetProtocol = 0;
char *pNetAddress;

/* get the arguments */

wEvent = VARARG_GET( argPtr, WORD );
SessionId = VARARG_GET( argPtr, SESSIONID );
pRemoteName = VARARG_GET( argPtr, char far * );
dwFlags = VARARG_GET( argPtr, DWORD );
wNetProtocol = VARARG_GET( argPtr, WORD );

//若上面的协议为TCPIP,此处pNetAddress 就是客户的IP地址
pNetAddress = VARARG_GET( argPtr, char far * );


/* for this example, only process post Domino Authentication */
if (theData->NotificationType != EM_AFTER)
break; /* break out of here */

/* switch on types of wEvent */
switch (wEvent)
{

/* additional authentication code goes here */
case AUTHEM_StartAuthentication:

if (dwFlags & fAuthRoleServer)
{

/* protocol processing... */
switch (wNetProtocol)
{
case PROTOCOL_TCP:
//你要实现的功能在这儿,pRemoteName是用户名,pNetAddress是用户IP地址
处理函数(pRemoteName,pNetAddress);
break;
default:
break;
}
}
sError = ERR_EM_CONTINUE;
break;
default:
sError = ERR_EM_CONTINUE;
break;
}

} /* END SWITCH */
return( sError );
}

要将这些函数(还有其它一些必须的函数,具体参阅API资料)
编译为DLL,并且在服务器的notee.ini文件中加入
EXTMGR_ADDINS=你的DLL

这样,每次用户从Notes Client登录都会调用你的函数了。
chenyg2000 2003-08-26
  • 打赏
  • 举报
回复
可以通过java代理实现
daluoboequalto 2003-08-26
  • 打赏
  • 举报
回复
7

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧