jpcap 라이브러리에 관한 몇가지 질문입니다.

tyolee83의 이미지

이 프로그램 짜면서 계속 질문만 올리게 되네요

우선 읽어주신분, 답변주신 분들께 미리 감사드립니다.

자바로 jpcap을 이용하여 패킷을 캡쳐하고

유해사이트 발견시 제가 만든 패킷을 전송해서 차단을 시키는 프로그램인데요

패킷을 조작해서 byte[] 로 가지고 있는 단계까지는 할 수 있으리라 생각됩니다.

바이트 배열에서 offset 조작해서 데이터 만지는 노가다를 하는 중이구요...

그런데 문제는

sourceforge의 jpcap에는 패킷을 보내는 메소드가 없다는 사실입니다. ㅠㅠ

그래서 http://netresearch.ics.uci.edu/kfujii/jpcap/doc/javadoc/index.html

여기의 jpcap에는 패킷을 보내는 메소드가 있거든요

이 메소드의 소스를 구해서 보았더니 다음과 같습니다.

package jpcap;

/** This class is used to send a packet. */
public class JpcapSender
{
	private static final int MAX_NUMBER_OF_INSTANCE=10;
	private static boolean[] instanciatedFlag=new boolean[MAX_NUMBER_OF_INSTANCE];
	private int ID;

	private JpcapSender() throws java.io.IOException{
		//find unused ID
		ID=-1;
		for(int i=0;i<MAX_NUMBER_OF_INSTANCE;i++)
			if(!instanciatedFlag[i]){
				ID=i;
				instanciatedFlag[i]=true;
				break;
			}
		
		if(ID==-1) throw new java.io.IOException("Unable to open a device: "+MAX_NUMBER_OF_INSTANCE+" devices are already opened.");
	}
	
	
        /** Initializes a network interface for sending a packet,
         * and returns an instance of this class.
         * @param device Interface for sending a packet
         * @throws IOException Raised when initialization of the interface failed
         * @return intstance of this class (JpcapSender)
         */        
	public static JpcapSender openDevice(String device) throws java.io.IOException{
		JpcapSender sender=new JpcapSender();
		sender.openRawSocket(device);
		
		return sender;
	}

	/**
	* IP긬긑긞긣몭륪뾭궻?긑긞긣귩룊딖돸궥귡
	*
	*/
	private native void openRawSocket(String device);

	/** Sends a packet.<P>
         * On UNIX, only IP packet is supported.
         * For ICMP, only echo packet is supported (to prohibit DOS attack). <P>
         * ON WINDOWS, you may be able to send non-IP packet, too. However, on Windows,
         * you must also set the Datalink layer header (e.g. Ethernet header).
         * @param packet Packet to be sent
         */
	public native void sendPacket(IPPacket packet);
	
        /** Closes the interface. */        
	public native void close();
}

여기서 제 생각에 중요한 부분은

private native void openRawSocket(String device);
public native void sendPacket(IPPacket packet);
public native void close();

이 부분인것 같은데요

이것들은 native라는 것으로 선언만 되어 있고 구현이 되어 있질 않네요

제가 알기로 native는 C 쪽 함수를 가져다 쓰는 것으로 알고 있어서요....

그래서 혹시나 winpcap에 이것들이 구현되어있나 하고 찾아봤더니

안되어있더라구요ㅠㅠ

그래서 제 프로그램에 이와 같이 응용해 보았습니다.

private native void openRawSocket(String device);
public native void sendPacket(byte[] packet);
public native void close();

제가 가지고 있는 것은 패킷이 byte[]로 생긴 것이기 떄문에...;;

이 부분만 성공한다면

어떻게든 프로젝트를 완성할 수 있을만한 단계까지 와 있는데요

너무 힘드네요 ㅠㅠ

jni 안써볼려고 GUI도 SWT로 만드는데요... ㅠㅠ(트레이를 사용하려 하거든요)

자바가 참 사람 힘들게 하네요 ㅠㅠ

차라리 처음부터 winpcap으로 C로 짰으면

번거롭더라도 이러진 않았을거 같은데... ㅠㅠ

여튼 고수님들 자세한 답변 부탁드립니다.

프로젝트 마감이 얼마 남지 않았거든요 ㅠㅠ

꼭 부탁드립니다.

익명 사용자의 이미지

jni,.,....
jpcap도 내부적으로 jni를 쓸텐데요....
일단 가능한 해결법으로 가고, 후일 이를 없애는(?) 방법을 강구하는게 좋아보입니다.

익명 사용자의 이미지

winpcap 으로 보내는 놈을 구현하시고 기타 IPC 를 통해서 그놈한테 패킷을 보내달라고 전달하시죠 ;;

shamlock의 이미지

RAW 소켓으로 보낼수 있는 패킷의 종류도 제한되어 있지 않나요?
다른 방법을 사용하셔야 할듯한데..

@.@

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.