• 締切済み

ポートスキャンツールについて

KaZtoYouの回答

  • KaZtoYou
  • ベストアンサー率73% (11/15)
回答No.1

SO_TIMEOUTを指定して一定時間レスポンスがなければ早々に切り上げれば いいのではないでしょうか。 Socket#setSoTimeout(int timeout)でしょうかね。

関連するQ&A

  • 初歩的なソケット通信(java)

    初歩的なソケット通信(java) javaのソケット通信プログラムについて質問させて頂きます。まだまだ基礎の段階なのですが、詰まってしまたので、良かったら教えてください。 以下プログラムコード ------------------------------------- //サーバー側 import java.net.*; import java.io.*; public class Server { static int port = 12345; public static void main(String[] args) { try{ //サーバソケットの作成 ServerSocket ssoc = new ServerSocket(port); //メインループ while(true){ try{ System.out.println("クライアントからの接続を"+ port +"で待ちます"); Socket soc = ssoc.accept(); System.out.println(soc.getInetAddress().getHostName()+"から接続を受けました"); //処理をスレッドに任せます new Connect(soc); }catch(IOException e1){ e1.printStackTrace(); } } }catch(IOException e2){ e2.printStackTrace(); } } } class Connect extends Thread{ private Socket socket = null; public Connect(Socket socket){ this.socket = socket; //スレッド開始 this.start(); } public void run(){ try{ //出力ストリームを取得 OutputStream os = socket.getOutputStream(); PrintWriter out = new PrintWriter(os,true); //入力ストリームを取得 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader in = new BufferedReader(isr); String inputLine; while((inputLine = in.readLine()) != null){ //System.out.println(inputLine); out.println(inputLine); } System.out.println("処理が終わったので接続を切ります"); in.close(); out.close(); socket.close(); }catch(Exception e1){ try{ socket.close(); }catch(Exception e2){ e2.printStackTrace(); } } } }

  • 標準入力をするメソッドを作り例外処理をそのメソッド内で行います

    以下のソースでエラーが発生します return文は書いているのですが エラー内容は 「return 文が指定されていません」 と出ます。 return文はどこに置けばいいのでしょうか。 よろしくお願いします。 public static int getStdin(){  try{   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   return (Integer.parseInt(br.readLine()));  }catch(IOException e){   System.out.println("標準入出力でのエラー");  }catch(NumberFormatException e){   System.out.println("不正な入力が行われました");  }finally{   System.out.println("例外処理が無事終了");  } }

    • ベストアンサー
    • Java
  • echoサーバについて

    javaを勉強しています。 echoサーバをつかったサンプルがあり、vinelinux上でコンパイリし実行したのですが、ioexceptionの例外が出ているようです。 echoサーバは動いていないのでしょうか?? echoサーバが動いているかどうか確認する方法はないですか? このようなプログラムです。 import java.io.*; import java.net.*; public class EchoClient{ public static void main(String args[])throws IOException{ Socket echoS = null; BufferedReader in = null; PrintStream out = null; try{ echoS = new Socket("1300",7); in = new BufferedReader(new InputStreamReader(echoS.getInputStream())); out = new PrintStream(echoS.getOutputStream()); }catch(UnknownHostException e){ System.out.println("ホストに接続できません"); System.exit(1); }catch(IOException e){ System.out.println("ioコネクションを得られません"); System.exit(1); } BufferedReader stdln = new BufferedReader(new InputStreamReader(System.in)); String typedString; while((typedString = stdln.readLine()) != null){ out.println(typedString); System.out.println("サーバーからのエコー" + in.readLine()); } in.close(); out.close(); stdln.close(); echoS.close(); } }

    • ベストアンサー
    • Java
  • 例外処理の付け方

    javaを使って通信のプログラムを作成しています。 ホストAで送信データを作成し、そのデータをホストBに送信して、 ホストAが送信するのにかかった時間と、ホストBが受信するのにかかった時間を 計測するプログラムを作成しました。 送信と受信の処理を行うのですが、送信側では、write()でバッファに書き込んで、 fulsh()で書き込まれたバイトを出力ストリームに書き込みます。 受信側では、while((ch=in.read()) != -1)で送信データをすべて読み込ませます。 write()、fulsh()を使って送信し、read()で受信するのですが、 これらのメソッドが正常に動いたかどうかを調べたいのです。 ネットで方法を調べたのですが、try catchを使うことで例外処理が発生したら、 エラーを出力させることができることがわかりました。 もしurite(),fulsh(),read()が正常に起動しないならエラーを出したいのです。私なりに考えて以下のようにしました。 コードは以下のとおりです。送信部分、受信部分です。 送信側 int count = 0; // write()の回数 System.out.println("<データ送信処理>"); start = System.nanoTime(); // 計測開始時間 for (int i = 0; i < Data - 2; i++) {   try {     out.write(i);     count++;   } catch (IOException e) {     System.out.println(i + ":書き込みエラー");   } } try{   out.write('\\'); }catch(IOException e){   System.out.println("\\" + "書き込みエラー"); } try{   out.write('s'); }catch(IOException e){   System.out.println("s" + "書き込みエラー"); } count = count + 2; out.flush(); stop = System.nanoTime(); // 計測終了時間 System.out.println("送信完了"); 受信側 while (ch != -1) {   try{     ch = in.read();   }catch(IOException e){     System.out.println("読み込みエラー");   }   Count++;   if (ch == '\\') {     on = true;   } else if (on == true && (char) ch == 's') {     stopNs = System.nanoTime();     System.out.println("受信終了時間を確認");     break;   } else if (on == true && (char) ch != 's') {     on = false;   } } メソッドが正常に起動しない場合は、例外処理を行うということを したいのですが、上の方法は正しいのでしょうか? このようにして実行しても、「入力エラー」と言う表示はされません。 もしかしたら、ただ異常な動作が行われていないから、そういったエラーが 表示されないのかもと考えましたが、例外処理の書き方が違う可能性があると思い、 質問させていただきました。 どなたかアドバイスしていただけないでしょうか?

    • ベストアンサー
    • Java
  • throw文について

    上と下のソースプログラムがよく似ているのにもかかわらず上記のプログラムでコンパイルエラー発生する理由がわかりません。 解決方法はpublic static void badMethod()throws IOException{に書き換えるということが分かっていますがイマイチ理屈が分からない次第であります。 たぶん、上記のプログラムはimport文があるからだと思うのですが回答のほどよろしくお願い致します。 (コンパイルエラー) import java.io.IOException; class TryCatch{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(IOException ex){ System.out.println("B"); } catch(Exception e){ System.out.println("C"); } System.out.println("E"); } public static void badMethod(){ throw new IOException(); } } (コンパイル正常) public class X{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(Exception ex){ System.out.println("B"); } finally{ System.out.println("C"); } System.out.println("D"); } public static void badMethod(){ throw new RuntimeException(); } }

  • 楽天GOLDのポート変更でFTP送信JAVAプログラムが動かなくなりました

    初めて投稿させていただきます。 この度、楽天GOLDのFTPのポートが21から16910に変更になるというアナウンスが届いたため、JavaのプログラムでFTP送信処理を行っていたロジックにポートを指定するように変更にしました。 またPASVモードを使用するように指定されていたため、使用するようにロジックを変更しました。 変更後はコネクションを張ってログインまではプログラム上で正常に動いているのですが、肝心のファイルを送信する箇所で失敗してしまいます。 FFFTPというツールでは新しいポートでも正常に動いているため、何が原因かわからず困っております。 どなたかJavaのFTP処理でお詳しい方いらしたらご教授お願い致します。 public static void main(String[] args) { FTPClient fp = new FTPClient(); String sever = "ftp.rakuten.ne.jp"; int port = 16910; String user = "*****"; String password = "******"; int timeout = 40000; String path = "/test/test.jpg"; FileInputStream is = null; try{ fp.enterLocalPassiveMode(); fp.connect(sever,port); if (!FTPReply.isPositiveCompletion(fp.getReplyCode())) { System.out.println("接続失敗!"); }else{ System.out.println("接続成功!"); } if (fp.login(user, password) == false) { System.out.println("ログイン失敗!"); }else{ System.out.println("ログイン成功!"); } fp.setFileType(FTP.BINARY_FILE_TYPE); fp.setSoTimeout(timeout); is = new FileInputStream("C:\\TEST\\test.jpg"); boolean boolFtp = fp.storeFile(path, is); if(boolFtp){ System.out.println("ファイル転送成功!"); }else{ System.out.println("ファイル転送失敗!" + fp.getReplyCode()); } }catch(Exception e){ System.out.println("例外発生!"); } }

    • ベストアンサー
    • Java
  • 変数について

    プロパティファイルから読み取った値をほかのクラスから使いたいと考えて以下のような2つのクラスを作成しました。 [プロパティ読み取り] public class Admin{ public static String HOST; public static String ACCOUNT_NAME; public static String ACCOUNT_PASSWD; /** * * @throws java.io.IOException */ public Admin() throws IOException{ try{ // read from properties file.      Properties pro = new Properties(); pro.load(new FileInputStream("プロパティファイル")); HOST = pro.getProperty("host"); ACCOUNT_NAME = pro.getProperty("account.name"); ACCOUNT_PASSWD = pro.getProperty("account.password"); }catch(Exception e){ System.out.println(e); } System.out.println("Host: "+ HOST); System.out.println("User: "+ ACCOUNT_NAME); System.out.println("Password: "+ ACCOUNT_PASSWD); } } [変数使用] public class Update { public static void main(String[] args) { System.out.println("Host: "+ Admin.HOST); System.out.println("User: "+ Admin.ACCOUNT_NAME); System.out.println("Password: "+ Admin.ACCOUNT_PASSWD); } } Adminクラスの出力では、変数に正しい値がセットされていますが、Updateクラスではnullが返ります。 スコープの問題かと思うのですが、どこをどのように改良したらよいかわかりません。 nullではなく、正しい値を取得するにはどのようにすればよいでしょうか

    • ベストアンサー
    • Java
  • 「IOException は対応する try 文の本体ではスローされません。」というエラー。

    次のようなクラスを作成したのですが、表題のようなエラーが出てしまいます。 PrintWriterクラスのcloseメソッドは、 Closableインターフェースのcloseと witerクラスのcloseと同じ定義だと考えていたので、きっとIOExceptionが発生すると考えていたのですが・・・違うのでしょうか? Finallyの中にtryを書くと何か問題が起こるのでしょうか? ソースをそのまま書くのは気が引けるのですが、どうか教えて頂けないでしょうか? /** * ファイルに文字を書き込むクラス */ class Sample { PrintWriter writer; //書き込むためのクラス public void writerTest() { try { //** テストファイルに書き込み */ writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("sample.txt",false),"EUC-JP"))); //書き込みを行います writer.println("A"); writer.flush(); } catch(IOException ioe) { System.out.println(ioe.getMessage()); } finally { try { writer.close(); } catch(IOException ioe) //このcatchでエラーが発生します。 { System.out.println(ioe.getMessage()); } } } }

    • ベストアンサー
    • Java
  • ifを使った判断プログラムです(おそらく簡単)

    以下のプログラムをコンパイルしたいのですが、8行目のシンボル:変数readerが見つからないと表示されます。 いくら見直しても改善方法がわからないので、質問しました。 おそらく簡単な問題であると思うのですがわからなくて・・・ それともreader.readLine();がコマンドプロントンでは反応できないものなのでしょうか。 教えてください。よろしくお願いします。 import java.io.*; public class Kasa1{ public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in),1); try{ System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n = Integer.parseInt(line); System.out.println("降水確率は" + n + "%です。"); if(n >= 50){ System.out.println("傘を忘れずにね。"); } else { System.out.println("傘はいりません。"); } System.out.println("いってらっしゃい。"); } catch(IOException e){ System.out.println(e); } catch(NumberFormatException e){ System.out.println("数字の形式が正しくありません。"); } } }

    • ベストアンサー
    • Java
  • 10進数を2進数に変換するプログラムについて

    キーボードから入力された10進数を2進数に変換するプログラムで入力される数は1~1000の値までが入力できる数です。 配列を使うらしいのですがどのようにアルゴリズムをどのように表したらいいのかわかりません! import java.io.*; class Question7_3{ public static void main(String[] args){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.print("数字を入力してください:"); } System.out.print("入力されたデータを2進数に変換すると:"); }catch(NumberFormatException e){ System.out.println("整数以外が入力されました。"); }catch(IOException e){ System.out.println("例外発生:" + e); } } }