수신지, 발신지 아이피를 디비에 넣고자 합니다..

신호철의 이미지

Pcap 라이브러리로 잡은 수신지, 발신지 아이피를

MySQL디비에 넣을려고 합니다..

C기반이며,, 방법아시는분 가르쳐 주세요~~~*

디비 생성시 어떤 자료형인지..등등

구체적으로.. 가르쳐 주세요~~

신호철의 이미지

제가 공부하다가 찾게됐습니다.

char src_ip[1000];
char dst_ip[1000];

sprintf(src_ip,"%d.%d.%d.%d",src_ipadd[0],src_ipadd[1],src_ipadd[2],src_ipadd[3]);
sprintf(dst_ip,"%d.%d.%d.%d",dst_ipadd[0],dst_ipadd[1],dst_ipadd[2],dst_ipadd[3]);

sprintf를 사용했습니다.

소스 아이피와 도착지 주소를 각각 분리한후 그걸 다시 정수형으로 넣은후 그 출력 내용을 반환하여 src_ip, dst_ip에 그 값들을 넣었습니다.

서지훈의 이미지

신호철 wrote:
char src_ip[1000];
char dst_ip[1000];

sprintf(src_ip,"%d.%d.%d.%d",src_ipadd[0],src_ipadd[1],src_ipadd[2],src_ipadd[3]);
sprintf(dst_ip,"%d.%d.%d.%d",dst_ipadd[0],dst_ipadd[1],dst_ipadd[2],dst_ipadd[3]);


어떻게 위와 같은 코드가 나오는지 이 부분 소스라도 한 번 보고 싶군요...-_-ㅋ
정말로 보기 드문 소스 같아서...
좀... 많이 비효율적인거 같군요...

참고로
char *inet_ntoa(struct in_addr in);
이 놈을 참고 해 보세요...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

maximus의 이미지

그렇게 string 형태로 바꾸면 나중에 sort 하거나 검색시 많은양의 데이타가 있을경우 속도저하 요인이 될수 있습니다.

그냥 LONG 값으로 DB에 넣으시고.빼올때는 cast 해서 일반적인 ip 스트링 형태로 보시는게 더 좋습니다..

=================================
:: how about a cup of tea ? ::
=================================

신호철의 이미지

struct	ip   *iph;	//IP Header Struct Pointer//

이렇게 구조체 변수로 iph를 선언한후에...
u_char *src_ipadd;	   //Source IP Address
u_char *dst_ipadd;	   //Distination IP Address

-------------------------------------------------------------------------------
위에껀 헤더파일에 선언.
src_ipadd = ((u_char *)&(iph -> ip_src));
dst_ipadd = ((u_char *)&(iph -> ip_dst));

차례로 소스아이피와 도착지 아이피를 뽑아내어 변수에 저장합니다.

-----------------------------------------------------------------------------------

char src_ip[1000]; 
char dst_ip[1000]; 

sprintf(src_ip,"%d.%d.%d.%d",src_ipadd[0],src_ipadd[1],src_ipadd[2],src_ipadd[3]); 
sprintf(dst_ip,"%d.%d.%d.%d",dst_ipadd[0],dst_ipadd[1],dst_ipadd[2],dst_ipadd[3]); 

sprintf(buff,"insert into log values" "('%s','%s','%s','%s','%d','%d','%s')", rule_mapping[rule_number].Attack_Type, rule_mapping[rule_number].Name, src_ip, dst_ip, src_port, dst_port, ctime(&t));
mysql_query(&mysql,buff);


--------------------------------------------------------------------------------------
이부분이 D/B 에 쓰는부분.

이렇게 했습니다.

롱이면 숫자로 말입니까?

아이피는 203 230 xx xxx 4개 각각 입력이 들어오지 않나요?

이걸 어떻게 롱값으로 그냥 D/B에 넣죠?

그래서 저걸 출력할때 루프문을 써서 4개 합쳐서 출력하곤 했습니다.

넣는다면 어떤식으로 롱형으로 넣는지..?

서지훈님 말씀대로..

char *inet_ntoa(struct in_addr in);

이놈을 한번 조사해보도록 하겠습니다....

[/code]

ifyou의 이미지

신호철 wrote:

sprintf(src_ip,"%d.%d.%d.%d",src_ipadd[0],src_ipadd[1],src_ipadd[2],src_ipadd[3]); 
sprintf(dst_ip,"%d.%d.%d.%d",dst_ipadd[0],dst_ipadd[1],dst_ipadd[2],dst_ipadd[3]); 

sprintf(buff,"insert into log values" "('%s','%s','%s','%s','%d','%d','%s')", rule_mapping[rule_number].Attack_Type, rule_mapping[rule_number].Name, src_ip, dst_ip, src_port, dst_port, ctime(&t));
mysql_query(&mysql,buff);


--------------------------------------------------------------------------------------
이부분이 D/B 에 쓰는부분.

이렇게 했습니다.

롱이면 숫자로 말입니까?

아이피는 203 230 xx xxx 4개 각각 입력이 들어오지 않나요?

이걸 어떻게 롱값으로 그냥 D/B에 넣죠?

IP라는 것이 xxx.xxx.xxx.xxx로 이루어져 있는데, 각 자리는 8비트니까
결국 32비트, 즉 4byte, 다시 말해 long type으로 표현이 된다는 말이죠 :lol:

src_ipadd에 들어 있는 값은 원래 lont type값을 집어 넣은 건데 다시 long
type으로 변경하자만,

unsigned long* org_ipaddr;
org_ipaddr=(unsigned long)src_ipadd;

정도되겠지요. 그냥 이해하자고 적은 부분입니다.

long타입으로 저장했다가 필요할때 마다 변환해서 사용하던지,
처음부터 string형태로 사용하던지.... 용도에 따라 다르겠죠?

신호철의 이미지

long 형으로 넣는다는게,, 이런식으로
23923081220

넣는다는 소리입니까?

근데 u_long 범위가,,

0 - 4294967295 이거인데

초과되지 않나요?

그리구,, 저희 로그디비 만드는데 쓰거든여,, 로그디비면,,

사용자들이 보기쉽게 만들어야 되지 않을까요?

그래서 번거롭게라도 Pcap으로 받은 아이피 정보를 따로 4개 불러서 캐릭터

형으로 넣었습니다..

neohwang의 이미지

윗분이 말씀하신 것처럼....

IP Address 는 4 bytes 입니다.

그럼, sizeof()로 보셔서 4 bytes 이사의 길이를 같는 데이터 형은 다 IP 를 넣을 수 있습니다.

특히, DB에 넣는다면 Sorting 등에서 아주 효율적이죠.
(물론 디스크 공간도 절약되고요)

물론 IP String -> 숫자로
숫자 -> IP String 으로 변환하는 함수를 사용하셔야 겠죠.

maidland의 이미지

neohwang wrote:

물론 IP String -> 숫자로
숫자 -> IP String 으로 변환하는 함수를 사용하셔야 겠죠.

문자열에서 숫자로 바꿔주는 함수는...

바꾸고자 하는 숫자가 정수일때.. atoi() 함수를..

바꾸고자 하는 숫자가 Long형 정수일때.. atol() 함수를 사용하시면 될꺼 같군요 8)

>> http://ragnarok.co.kr <<

라그온+ㅁ+ 댄서는 아직 죽지 않았다!!
=-=-=-=-=-=-=-=-=-=-=-

ifyou의 이미지

신호철 wrote:
long 형으로 넣는다는게,, 이런식으로
23923081220

넣는다는 소리입니까?

근데 u_long 범위가,,

0 - 4294967295 이거인데

초과되지 않나요?

239.230.81.220

==> 239 : EF
230 : E6
81 : 51
220 : DC

EF E6 51 DC 를 나열하고 한개의 숫자로 읽으면

4024848860(10)

신호철 wrote:

그리구,, 저희 로그디비 만드는데 쓰거든여,, 로그디비면,,

사용자들이 보기쉽게 만들어야 되지 않을까요?

용도에 따라 다르겠지만, 수시로 볼것이 아니라면 그냥 숫자로

저장한 변환해서 출력하는 것이 좋겠군요. 어디까지나 제 생각입니다.

댓글 달기

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