###前提・実現したいこと
自力で今現在プログラムを作っています。
winSCPとtera termを使って、自社のHPのアクセスログを引っ張ってきて、今現在○○.bakという形式のファイルの中にログがずらりと並んでいる状態です。(SAKURAエディタで開いて見れる状態です)
以前は上記2つのソフトウェアをjavaプログラムで動かして…と考えていましたが、そんな時間もないので、純粋にSAKURAエディタで見れるログからIPアドレスを取ってそこからホスト名を取得するプログラムを書こうと考えています。
まずファイル(.bak)を読み込むのでFileメソッドを使って.bakファイルを指定して、そのあとFileReaderメソッドを使って1文字ずつ読み込むコードを書きました。(正しいか否かはわかりません。)
そのあとは繰り返しの処理でIPアドレスだけ抜き取ってSetするらしいです。
書きたいプログラムの流れは以下に記載します。
1.ファイルの先頭から順に読む ←私はFileメソッドを使いました
2.ファイルの1行を読んだらIPアドレスの部分だけ取り出す ←ここからわかりません。
3.IPアドレスを取り出したらSetに入れる
4.繰り返しの外でSetの分だけ回す
5.IPアドレスからDNSを使ってホスト名を取得する
6.取得したホスト名をsysoutする
###回答してくださった、またここを閲覧してくださった方々へ
まず私の質問をご覧いただきありがとうございます。
今回振られた仕事は、新人3か月目としては、ほかの会社では普通ありえないタスクらしいのですが、それを言ってしまっては成長を止めてしまいます。今回はもちろんチャンスだと思い引き受けたのですが、途中で期限が本日中と急きょ決められてしまい、勉強より先に終わらせることが先だと思いteratailを使った次第です。初めての質問でご不快に思われる方もいらっしゃるかもしれません。ご容赦ください。
新人研修が先週終わったばかりでわからないことだらけですが、このサイトを愛用して毎日勉強しています。
何卒よろしくお願いいたします
###わからないこと
◆.bakファイルを読み込むのにもっと最適な方法があれば教えてください。
◆Substring以外でIPアドレスを抜き出す方法があれば教えてください。
すべてがすべてXXX.XXX.XXX.XXXの形ではないのでSubstringだとズレが起きるのではと懸念しています。
◆eclipseを使用しているのですが、上記の流れのプログラムって一つのjavaファイルに収まるのでしょうか?分けるとしたらどこをどう分ければよいのでしょうか。
###補足情報(言語/FW/ツール等のバージョンなど)
使用言語:Java
開発環境:eclipse、Tomcat8
###ソースコード
package main;
import java.io.;
import java.net.InetAddress;
import java.util.;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DomainInfoMain {
public static void main(String[] args) {
try {
File file = new File("C:\Users\-会社名-\Desktop\ssl_request_log.bak");
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
String str = br.readLine();
while(str != null){
System.out.println(str);
str = br.readLine(); } br.close(); } catch (FileNotFoundException e) { System.out.println(e); } catch (IOException e) { System.out.println(e); } } Set<String> set = new LinkedHashSet<String>(); public static String extractMatchString() { Matche matcher = Pattern.compile("/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3} ([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/").matcher(); if(matcher.find()){ set.add(matcher); } for(String tmp : set){ System.out.println(tmp); } InetAddress inet = InetAddress.getLocalHost(tmp); String hostName = inet.getHostName(); System.out.println("ホスト名:" + hostName); } }
上記の流れ1~6に書いた通りにソースコードを書いてみました。
回答3件
あなたの回答
tips
プレビュー