DB에 저장된 IP를 가져와서 주기적으로 핑날려서 alive유무 확인

flatony의 이미지

SNMP 매니저를 웹으로 구현하려고 하는데요,,,,

오라클에다가 에이전트 IP를 등록시켜놓고,,,,

C로 코딩하려는 엔진,,,

요기서는 이 등록된 아이피를 전부 셀렉트 해와서

각각을 ping을 3번 보내서,,,,,timeout이거나 3000ms이상이면 죽은걸로

그게 아니면 산걸로,,,, 일케 코딩하려고하는데,,,,여,,

일단 이게 되야,,,,snmpget으로 MIB값을 가져오는건 다음 문제일듯싶은데,,,

1. 일정시간이 되면 오라클에 있는 IP를 가져와서 각각에 핑을 날려야하는데

5분마다 확인한다고하면,,,,최초 시간을 기준으로 한다고했을때,,,,

이걸 어케 코딩해야할지 막막하네여,,,,,

2. 그리고 ping으로 값을 가져왔을때,,,,이 값들을 어케 파싱해서,,,,판단해야하는지,,???

고수님들의 많은 조언 부탁드립니다...쩝!

urstory의 이미지

아침에 아기 기저귀 갈고, 이것 저것 둘러보다가

시간이 약간 있길래 JAVA로 작성해 보았습니다. 어떤 언어를 이용하든

실행하는 방법은 비슷하리라 생각합니다.

다만 JAVA보다는 C언어가 더 편할지도. :-)

먼저 Ping하는 부분은 외부의 ping프로그램을 이용했고요.

아직은 완전한 Ping을 순수 100% 자바로는 구현할 수가 없기때문입니다.

그 이유는 PING을 구현하기 위해서는 ICMP packet을 필요로

하는데요.

해당 Packet을 전송하기 위하여는 SOCK_RAW type 의 Socket이

필요한데, JAVA에서는 지원하지 않기 때문입니다

여하튼 예제는 3개의 도메인(sunny.sarang.net과 kldp.org는
존재하는 도메인, 나머지 한개는 존재하지 않는 도메인)으로 ping
을 한 후 결과를 가지고 오는 내용입니다.

일단 실행하기 위하여는 java가 당연히 설치가 되어있어야 겠지요.
실행방법 : java PingProcessTest

import java.io.*;
public class PingProcessTest{
	public static void main(String args[]){
		String[] ips = { "sunny.sarang.net", "kldp.org", "adfaf.com" };
		PingProcess[] pps = new PingProcess[ips.length];

		// thread를 이용하여 ips배열의 domain으로 Ping을 실행

                               // 이부분에서 database로 부터 select하여 5분마다 실행할 수 있도록 무한반복.
/*
                               try{
                                     // 5분 sleep. select하는 시간도 있으니깐 알아서 쉬도록!
                                      Thread.sleep(50000);
                              }catch(Exception ex2){}
*/
		for(int i = 0; i < pps.length; i++){
			pps[i] = new PingProcess(ips[i]);
			pps[i].start();
		}

		// 실행된 결과를 가지고 오는 부분 getMsg()부분에서 시간이 지연될 수도 있기 때문에
		// 해당 부분도 thread로 실행할 수 있도록 하는 것이 좋을듯. :-)
		for(int i = 0; i < pps.length; i++){
			System.out.println(ips[i] + " : " + pps[i].getMsg());
		}
	}
};

class PingProcess extends Thread{
	private String msg;
	private String ip;

	public PingProcess(String ip){
		this.ip = ip;
	}
	public void run(){
		InputStream is = null;
		BufferedReader br = null;
		try{
			Runtime run = Runtime.getRuntime();
			Process p = run.exec("c:\\winnt\\system32\\ping.exe " + ip);
			is = p.getInputStream();
			br = new BufferedReader(new InputStreamReader(is));
			String line = null;
			while((line = br.readLine()) != null){
				//System.out.println(line); // line을 임시 출력해본다.
				if(line.indexOf("Reply") >= 0){
					break;
				}
			}
			if(line != null){
				msg = line.substring(line.indexOf("time=")+5, line.indexOf("TTL=")-1);
			}// if
		}catch(Exception e){

		}finally{
			try{
				if(br != null) br.close();
			}catch(Exception ex2){}
			try{
				if(is != null) is.close();
			}catch(Exception ex2){}
		}
	}
	public String getMsg(){
		try{
			join(); // 해당 thread가 종료될때까지 대기.
		}catch(InterruptedException ie){
			return null;
		}

		return msg;
	}

	public static void main(String args[]){
		PingProcess pp = new PingProcess("sunny.sarang.net");
		pp.start(); // thread 시작
	
		String msg = pp.getMsg();
		if(msg == null){
			System.out.println("sunny.sarang.net die");
		}else{
			System.out.println("time : " + msg);
		}
	} // end main
} // end class

----------
http://sunny.sarang.net
JAVA,Oracle,MySQL,Linux,PHP

hbsnow의 이미지

ping -> icmp, ROW Socket

5분 -> sleep(), alarm

mach의 이미지

urstory wrote:
아침에 아기 기저귀 갈고, 이것 저것 둘러보다가

시간이 약간 있길래 JAVA로 작성해 보았습니다.

질문] 무슨일을 하시는 분인지 궁금합니다. 멋지군요 ~ :D

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

sh.의 이미지

mach wrote:
urstory wrote:
아침에 아기 기저귀 갈고, 이것 저것 둘러보다가

시간이 약간 있길래 JAVA로 작성해 보았습니다.

질문] 무슨일을 하시는 분인지 궁금합니다. 멋지군요 ~ :D

저도 정말 궁금!

운형의 이미지

udp로 echo서버하나 만든다고 생각하시면 되겠네요.

5분마다는 윗분이 말한 것 처럼 알람 이용하구... 300ms는
셀렉트에 시간 구조체를 이용하시면 해결됩니다.

꼭 icmp를 써야하는 경우가 아니라면 udp에 어플리케이션 프로토콜 간단(검사대상아 서버 아이피정도)히 만들어서 사용하는게 오히려 네트웤 부하도 줄일 수 있을 거라 생각됩니다. 저도 얼마전 비슷한걸 만들어봐서... 흐흐

Do you think that's the air you are breathing now?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.