JavaでConnectExceptionが発生したときにソースtcpポートをログに記録しますか?

stackoverflower

Javaアプリケーション(JDK 1.8.0_65)からスローされた奇妙な接続拒否エラーをデバッグしています。

Wiresharkキャプチャを取得しましたが、通常のTCPセグメントとエラーのTCPセグメントの両方が含まれており、どちらがどちらであるかを区別する方法がありません。

Javaがスローされたときに送信元ポート番号をログアウトさせることができるかどうか知りたいConnectExceptionので、それを使用して検索できます。AspectJのようなツールを使用してこれを行うことはできますか?

参考までに、スタックトレースは次のとおりです。

Caused by: java.net.ConnectException: Connection refused: connect
                at java.net.DualStackPlainSocketImpl.connect0(Native Method) ~[na:1.8.0_65]
                at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) ~[na:1.8.0_65]
                at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_65]
                at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_65]
                at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_65]
                at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_65]
                at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_65]
                at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_65]
...
NándorElődBlack

クライアントソケットが明示的に作成されていない場合、bind()接続の確立に使用された送信元ポートを見つける方法はありません。したがって、デバッグの目的で送信元ポートについてレポートできるようにするには、接続呼び出しの前に明示的なバインドを行う必要があります。クライアントコードのソースにアクセスできる場合は、同様の方法で更新できます。

SocketAddress target = new InetSocketAddress(host, port);
int localPort = -1;
try (Socket socket = new Socket()) {
    socket.bind(null);
    localPort = socket.getLocalPort();
    socket.connect(target, timeout);
} catch (IOException e) {
    throw new IOException(
            String.format("couldn't connect to %s from port %d", target, localPort), e);
}

クライアントのソースコードを変更できない場合は、次の側面を使用してクライアントコードを織り込むことができます。へのメソッド呼び出しをインターセプトすることで機能しSocket.connect(...)、ソケットがすでにポートにバインドされているかどうかを判断し、バインドされていない場合は、を実行してbind(null)、バインドに使用できるポートを見つける必要があります。

import java.io.IOException;
import java.net.Socket;
import java.net.SocketAddress;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public aspect SocketExceptionLoggerAspect {

    private static final Logger logger = LoggerFactory
            .getLogger(SocketExceptionLoggerAspect.class);

    pointcut callToSocketConnect(SocketAddress target): 
        call(void Socket+.connect(..)) && args(target, ..);

    void around(SocketAddress target, Socket socket) : 
        callToSocketConnect(target) && target(socket) {

        int localPort = socket.getLocalPort();
        if (localPort == -1) {
            try {
                socket.bind(null);
                localPort = socket.getLocalPort();
            } catch (IOException e) {
            }
        }
        try {
            proceed(target, socket);
        } catch (IOException e) {
            logger.error(String.format("couldn't connect to %s from port %d", target,
                    localPort), e);
        }
    }
}

出力例:
SocketExceptionLoggerAspect - couldn't connect to stackoverflow.com/104.16.33.249:123 from port 49840 <stack trace...>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コンソールが何かをログに記録したときに発生するイベントはありますか?

分類Dev

エラーが発生した時間でcrontabシェルスクリプトエラーをログに記録しますか?

分類Dev

Spring RestTemplateを使用して、エラーが発生したときに応答をログに記録するにはどうすればよいですか?

分類Dev

java.sql.SQLExceptionをログに記録すると、オーバーフローが発生します

分類Dev

django RESTフレームワークで500エラーが発生した場合、すべてのリクエストとレスポンスをログに記録するにはどうすればよいですか?

分類Dev

NLog asp.netコアは、エラーが発生したときに、ログに記録せずに電子メールを自動的に送信します

分類Dev

抑制方法「リクエストの実行中に未処理の例外が発生しました。」Serilogでメッセージをログに記録する

分類Dev

TokenEndpointに到達したときに発生するエラーを傍受してログに記録するにはどうすればよいですか?

分類Dev

NLogは、何かがログに記録されたときにイベントを発生させますか?

分類Dev

GPUでテンソルフローをインポートしようとしたときにインポートエラーが発生しました

分類Dev

Rails 3.2でログを記録するときにログステートメントが発生するファイル名と行番号をログに記録するにはどうすればよいですか?

分類Dev

LibGDXとProGuardでAndroidAPKをエクスポートするときにエラーが発生しました

分類Dev

例外が発生した場合は、httpリクエスト本文をログに記録します

分類Dev

オブジェクト内の発生をカウントし、シーケンスが壊れたときにその数を記録します

分類Dev

特定のエンドポイントでエラーが発生した場合、ペイロードをログに記録しない

分類Dev

Pythonでzerorpcを使用してプロジェクトをドッキングするときにインポートエラーが発生しました

分類Dev

ローカルソースからChocolateyパッケージをインストールするときにエラーが発生しました

分類Dev

C ++の埋め込みPythonでテンソルフローをインポートするときにエラーが発生しました

分類Dev

ローカルデータベースからbacpacファイルをエクスポートするときにエラーが発生しました

分類Dev

インストールされたファイル(.reg)をInno Setupのプログラム(regedit)に渡すと、「インポートできません...ファイルを開くときにエラーが発生しました」で失敗します

分類Dev

IntelliJからCordaフローテストを実行するときにエラーが発生しました

分類Dev

Javaで書かれた私のプログラムを他の人が使えるようにするときにエラーが発生しましたか?

分類Dev

SparkでJodaDateTimeをブロードキャストするときにエラーが発生しました

分類Dev

エラーが発生したときにデータを終了して同時にmakefileに記録する方法

分類Dev

UncaughtExceptionHandlerのFirebaseDatabaseにスタックトレースをログに記録します。デフォルトのuncaughtExceptionメソッドの呼び出しで問題が発生します

分類Dev

Javaコードからmysqlにログインするときにエラーが発生しました

分類Dev

Jenkinsでリポジトリをプルしているときにロングパスエラーが発生しました

分類Dev

ストーム:例外が発生したときにトポロジを自動的に再送信するにはどうすればよいですか?

分類Dev

値コンソールはtrueとしてログに記録されますが、ifステートメントでfalseを要求します

Related 関連記事

  1. 1

    コンソールが何かをログに記録したときに発生するイベントはありますか?

  2. 2

    エラーが発生した時間でcrontabシェルスクリプトエラーをログに記録しますか?

  3. 3

    Spring RestTemplateを使用して、エラーが発生したときに応答をログに記録するにはどうすればよいですか?

  4. 4

    java.sql.SQLExceptionをログに記録すると、オーバーフローが発生します

  5. 5

    django RESTフレームワークで500エラーが発生した場合、すべてのリクエストとレスポンスをログに記録するにはどうすればよいですか?

  6. 6

    NLog asp.netコアは、エラーが発生したときに、ログに記録せずに電子メールを自動的に送信します

  7. 7

    抑制方法「リクエストの実行中に未処理の例外が発生しました。」Serilogでメッセージをログに記録する

  8. 8

    TokenEndpointに到達したときに発生するエラーを傍受してログに記録するにはどうすればよいですか?

  9. 9

    NLogは、何かがログに記録されたときにイベントを発生させますか?

  10. 10

    GPUでテンソルフローをインポートしようとしたときにインポートエラーが発生しました

  11. 11

    Rails 3.2でログを記録するときにログステートメントが発生するファイル名と行番号をログに記録するにはどうすればよいですか?

  12. 12

    LibGDXとProGuardでAndroidAPKをエクスポートするときにエラーが発生しました

  13. 13

    例外が発生した場合は、httpリクエスト本文をログに記録します

  14. 14

    オブジェクト内の発生をカウントし、シーケンスが壊れたときにその数を記録します

  15. 15

    特定のエンドポイントでエラーが発生した場合、ペイロードをログに記録しない

  16. 16

    Pythonでzerorpcを使用してプロジェクトをドッキングするときにインポートエラーが発生しました

  17. 17

    ローカルソースからChocolateyパッケージをインストールするときにエラーが発生しました

  18. 18

    C ++の埋め込みPythonでテンソルフローをインポートするときにエラーが発生しました

  19. 19

    ローカルデータベースからbacpacファイルをエクスポートするときにエラーが発生しました

  20. 20

    インストールされたファイル(.reg)をInno Setupのプログラム(regedit)に渡すと、「インポートできません...ファイルを開くときにエラーが発生しました」で失敗します

  21. 21

    IntelliJからCordaフローテストを実行するときにエラーが発生しました

  22. 22

    Javaで書かれた私のプログラムを他の人が使えるようにするときにエラーが発生しましたか?

  23. 23

    SparkでJodaDateTimeをブロードキャストするときにエラーが発生しました

  24. 24

    エラーが発生したときにデータを終了して同時にmakefileに記録する方法

  25. 25

    UncaughtExceptionHandlerのFirebaseDatabaseにスタックトレースをログに記録します。デフォルトのuncaughtExceptionメソッドの呼び出しで問題が発生します

  26. 26

    Javaコードからmysqlにログインするときにエラーが発生しました

  27. 27

    Jenkinsでリポジトリをプルしているときにロングパスエラーが発生しました

  28. 28

    ストーム:例外が発生したときにトポロジを自動的に再送信するにはどうすればよいですか?

  29. 29

    値コンソールはtrueとしてログに記録されますが、ifステートメントでfalseを要求します

ホットタグ

アーカイブ