颠覆:在预提交挂钩中获取用户的 IP 地址?

Posted

技术标签:

【中文标题】颠覆:在预提交挂钩中获取用户的 IP 地址?【英文标题】:Subversion: Get ip-address of user in pre-commit hook? 【发布时间】:2011-11-23 16:54:45 【问题描述】:

我们正在托管一个用于分布式软件开发的 subversion 存储库。因此,非员工可以访问我们的一些源代码。我们公司的 IT 安全政策要求我们对从公司 Intranet 外部上传的所有文件进行病毒扫描。所有内部计算机都配备了最新的病毒扫描程序。

我们计划将病毒扫描集成到 Subversion 预提交挂钩中。但这会在执行大型提交时导致延迟。因此,我们只想扫描源自我们内部网之外的提交。为了识别来源,我们需要执行提交的用户的 IP 地址。由于我们的一些员工在家工作,我们无法使用用户名来识别来自互联网的提交。

最后我的问题是:

如何获取在颠覆预提交挂钩中执行提交的 IP 地址?

【问题讨论】:

【参考方案1】:

假设你用 Perl 编写你的钩子,在这种情况下,你可以使用以下库:DocumentationClientIP

您可以通过此链接从 Git 安装库:GITClientIP(或使用包含的代码)。

安装后,您需要在代码中添加类似的内容:

    use SVN::Utils::ClientIP qw(ssh_client_ip);

    print "The client's IP address is ", ssh_client_ip();

【讨论】:

【参考方案2】:

我正在使用 lsof(bash 脚本预提交):

srcip=$(/usr/sbin/lsof -Pn -p $PPID | grep ESTABLISHED)

或者,仅获取 IP:

srcip=$(/usr/sbin/lsof -Pn|grep ssh|grep ESTA|cut -d\> -f 2|cut -d: -f 1)

当客户端连接到服务器时,会执行预提交。 lsof 显示所有打开的文件(包括 TCP 连接等);我为这个进程(-p $PPID)选择所有“文件”,为ESTABLISHED 选择grep(这是客户端和服务器之间的连接)。

【讨论】:

以上是关于颠覆:在预提交挂钩中获取用户的 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

SVN - 在开始提交挂钩中获取提交大小?

作为错误用户提交的更改? TortoiseSVN,颠覆

通过隧道颠覆

尝试使用 Eclipse 颠覆性插件提交时获取“只能在版本资源上执行 CHECKOUT”

如何在预提交挂钩中使用 git diff 的退出代码

没有作者颠覆 svn 提交