2

分散型ソフトウェア開発用の Subversion リポジトリをホストしています。そのため、非従業員はソース コードの一部にアクセスできます。当社の IT セキュリティ ポリシーでは、社内イントラネットの外部からアップロードされたすべてのファイルをウィルス スキャンする必要があります。すべての社内コンピュータには、最新のウィルス スキャナが装備されています。

ウイルス スキャンを Subversion の precommit-hook に統合する予定です。ただし、これにより、大規模なコミットを実行するときに遅延が発生します。そのため、イントラネットの外部で発生したコミットのみをスキャンしたいと考えています。発信元を特定するには、コミットを実行しているユーザーの IP アドレスが必要です。一部の従業員は自宅で仕事をしているため、ユーザー名を使用してインターネットからのコミットを識別することはできません。

したがって、最後に私の質問:

Subversion precommit フックでコミットが実行される IP アドレスを取得するにはどうすればよいですか?

4

2 に答える 2

2

lsof(bash-script pre-commit)を使用しています:

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)

クライアントがサーバーに接続している間、pre-commitが実行されます。lsof開いているすべてのファイル(TCP接続などを含む)を表示します。-p $PPIDこのプロセス( )とgrep ESTABLISHED(これはクライアントとサーバー間の接続)のすべての「ファイル」を選択します。

于 2012-04-27T14:55:33.623 に答える
2

Perl でフックを作成するとします。その場合、次の lib を使用できます

このリンクを介してGitからlibをインストールできます:GITClientIP(または含まれているコードを使用)。

インストール後、コードに次のようなものを追加する必要があります。

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

    print "The client's IP address is ", ssh_client_ip();
于 2011-09-23T13:53:22.147 に答える