packet을 수집해 flow를 생성하는 방법이 궁금합니다

youlovedj의 이미지

안녕하세요^^;

지난번에 10G급 트래픽 분석시스템 개발한다고 제가 글올렸었는데 너무 좋은 조언을 많이 해주셔서 감사드립니다~

그래서 그때 결국 좁혀진 것이 먼저 flow를 생성하고, DB를 heap table로 속도를 향상시키는 것이었습니다!!

나름대로의 판단으로 저런 결론을 얻게 되었고 그 이후에 제가 flow 관련 논문같은 것도 많이 봤었습니다~

그런데 라우터에서 보내는 flow를 받아서 분석하는 tool은 많이 보이는것 같은데 직접 flow를 생성하는 것에대한 구체적인 얘기는 없는 것 같습니다~

netflow라는 cisco 표준이 있다는데 그런건 제가 만들수 없는 것인가요?

아니면 라우터처럼 제 시스템에 소프트웨어를 설치하여서 직접 flow generator를 만들 수 있을까요?

지난번에 말씀드렸듯이 저는 DAG카드 8.2x를 사용하여 10G 망에 직접 연결하여 작업을 하고 있습니다~

DAG카드라 함은 그냥 패킷을 모으기 수월하게 해주는 하드웨어라고 생각하시면 될것 같습니다^^;

이번에도 고수님들의 소중한 답변 기다리겠습니다^______^*

감사합니다~~안녕히 계십시오!!^^

youlovedj의 이미지

제가 작성한 글을 보기위한 쉬운 방법이 있나요?^^;

네이버 같은 곳은 "내가 쓴글 보기(?)"라는 것이 있어서 쉽게 볼 수가 있었는데...

제가 아직 KLDP에 익숙치가 않아서 인지 일일히 페이지 넘겨가며 제 글을 찾고 있습니다^^

하루 이틀 지나니깐 찾기가 점점 힘들어 지는것 같아서요..ㅋㅋ

좋은 방법 알고 있으시면 공유부탁드립니다~

감사합니다^^*

youlovedj의 이미지

찾았네요^^;

최근포스트 > 내포스트가 있네요..ㅋㅋ

esllo의 이미지

netflow 보다는 sflow 는 소스도 공개 되어있고, 표준입니다.
www.sflow.org 한번 방문해 보세요..원하시는 답변인지는 잘 모르겠네요..^^

youlovedj의 이미지

안녕하세요~

sflow도 참고해보겠습니다^^

대충 찾아보니 패킷 전체를 뽑는게 아니고 sampling하는 방식이라서 한번 고려해보겠습니다~

답변 너무 감사드리고 좋은하루 되시길바랍니다^^*

mach의 이미지

검색어 : netflow probe

보통 probe라는 단어를 많이 쓰는 편입니다.

많은 프로그램을 보실 수 있겠습니다.

* DAG카드 정도면 이런 라이브러리 샘플정도는 제공될듯 한데요.

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

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

youlovedj의 이미지

안녕하세요^^

또 답변 달아주셨네요~감사드립니다^___^;

제가 netflow probe로 검색을 해봤는데 주로 나오는 것이 수집하는 것들이 나오는데...

혹시 제가 직접 netflow를 생성해낼 수 있는 것도 있나요?

flow 생성되는 방식이 제가 DAG카드에서 캡쳐한 패킷들을 flow 생성하는 utility(?)에 보내면 flow packet으로 만들어주는 건가요?

너무 초보적인 질문만 드려서 죄송합니다..^^;

정말 이번 과제통해서 이것저것 배우는게 참 많은것 같네요~

늘 감사합니다^^벌써 두번이나 신세를 지내요~

오늘 하루도 행복한 하루되시길 바랍니다~안녕히 계세요^^

mach의 이미지

예를 들어, 프로그래머의 친구인 sourceforge에서 fprobe를 찾아 볼 수 있습니다.
http://fprobe.sourceforge.net/
fprobe 이것을 사용하시면 될 텐데요.
DAG의 프로그래밍 인터페이스 중 하나인 PCAP과 링크 시켜서 사용하시면, 그냥 대충 사용이 되겠습니다.
즉, packet을 capture해서 다시 netflow generator로 보내는 것이 아니라, 자체가 생성하는 것이지요.

* 중요한 것은 일반적인 pcap라이브러리와 링크하는 것이 아닌, DAG카드에서 제공한 PCAP 라이브러리와 링크해야 한다는 것이지요.

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

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

youlovedj의 이미지

말씀해주신 곳에가서 다운을 받아 설치는 했습니다.

혹시 fprobe에 대한 얘기는 검색을 통해 찾기 어려운것 맞나요?

2시간 넘게 구글을 헤매도 fprobe의 사용 방법이라던지 나온 곳은 없네요.

fprobe -h 를 보며 하기 힘든건 제 능력의 부족인가요...?>.<

무슨 말씀인지는 알겠는데 어떻게 해야 하는지 엄두가 안납니다ㅡㅜ

mach의 이미지

netflow는 아시다시피 flow개념으로 특정 주기동안의 트래픽을 aggregation하여 전달하는 프로토콜입니다.
즉,
1) 저수준 패킷을 netflow 포맷으로 수집/축약하고
2) 이를 주기적으로 지정된 사이트(remote ip:port)로 udp로 전송(export)하고,
3) 이러한 데이터를 다수 소스(1,2역할하는장비로부터)로 부터 수집하고(collector)
4) 수집된 데이터를 분석하여 보고서등을 생성한다.
대략 이런 절차로 진행됩니다.

그런데, 본 쓰레드에서 질문자님께서 문의하신것은 flow생성 방법(즉 제가 정리한 1번에 해당)을 물어보신것이고, 이를 답변드렸습니다.
당연히, 기본적으로는 수집된 데이터가 지정된 IP:port로 송신되는지를 검사해보셔야 겠지요. (tcpdump등으로 해볼 수 있겠지요) 이때 송신시 사용되는 프로토콜(포맷+메시지플로우)이 netflow입니다.
아울러, 해당 원격사이트에(심지어 로컬호스트) 콜렉터(collector)를 두어 이러한 트래픽을 수집하셔야 합니다. 3)4)를 하셔야 한다는 얘기입니다.
다시 정리하자면, 1)2)역할을 해주는 것은 시스코/호환 라우터등에서 수행되며, 이를 소프트웨어로 에뮬레이션한 것 중 하나가 소개드린 링크입니다. 3)4)를 전부 연동하여야 결과를 보는 상황이 연출될 것입니다.
소위, 프로토타입, 모델하우스(?)가 되는 것이겠지요.
소프트웨어로는 probe, collector 이렇게 되겠지요.

트래픽 어쩌구 하면, 좀....되었으나, caida를 빼놓고 얘기하기 어렵습니다. 이 사이트에 가면, 아래 링크에서 콜렉터(3,4번 역할)들을 찾아보는 시작점을 찾을 수 있을 것입니다.
http://www.caida.org/tools/measurement/cflowd/

제가 소개드린 사이트가 최상의 사이트는 아니지만, 기본 개념을 잡는데 문제가 없으리라고 생각됩니다.

* 샘플링에 대한 저의 개인적 견해는 가능하다면 샘플링 안하는게 좋다. 입니다. 샘플링하지 않고 처리하기 어려우니까 신뢰수준 95%에 오차가 어쩌구하고 샘플링하는 것이지, 전수처리가 가능하다면, 그리하는게 좋겠지요. (전수처리가 더 좋다는 것이지, 샘플링이 나쁘다는 얘기는 아닙니다!) 네트워크 관리목적이라면 예를 들어, 볼륨, 빌링(과금)등의 목적이라면 샘플링이 고려되겠으나, 정보보호관점이라면 가급적 샘플링을 피해야 할 것입니다.
DAG나 콤보등 이와 유사한 하드웨어의 도움을 받는다면 보다 대용량 처리를 수행하는데 도움이 되리라고 생각합니다. 통상적인 하드웨어에서(흔히 보이는 PC서버) 순수 소프트웨어적으로 1G트래픽을 처리하고자 한 수년간의 논문들을 보면 소프트웨어 측면에서도 많은 발전을 느끼지만, 하드웨어 기반한 것도 좋다는 생각입니다. 특히, 10G이상 40G, 100G등을 고려한다면 하드웨어의 도움은 필연적인것으로 알려져 있습니다. 또한, 이를 지원하는 하드웨어와 벤더의 제품이 출시/예정하고 있는 것으로 알고 있습니다. (국내에서도 나왔으면 좋겠습니다. :) )
좋은 성취 있으시길...
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

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

youlovedj의 이미지

아..역시 명품 답변이십니다^_____^

제가 모르고 있던 것들, 궁금했던 것들이 거의 한방에 속시원히 해결되네요ㅎㅎ

저는 일단 초보적인 실력으로 DAG카드(10G지원)를 가지고 기본제공해주는 DAG API(pcap아님)을 가지고 헤더를 까보는 정도였습니다.

쉽게 될줄 알았는데 엄청난 트래픽을 처리하기위해서는 flow라는게 필요하다는 것을 알게되고 질문을 올리게 된거였습니다.

일단 말씀하신대로 flow 생성이 되고 collector로 보내면 반 이상 성공이 맞나요??

이번주와 다음주에는 그것을 꼭 해결하는 것을 목표로 연구해봐야겠습니다^^

네이버에는 전혀 자료가 없고, 그나마 구글에서 조금씩 보이고 있는데 KLDP에 글 올려서 받은 답변이 가장 큰 힘이 되는것 같습니다^^*

특히 mach님께 너무 감사드리고, 정말로 좋은 성과있었으면 좋겠습니다.

주변에 물어볼 곳도없어서 너무 어려웠는데 참 감사하네요ㅎㅎ

지금도 mach님께서 올려주신 글을 보고 제가 잘 해낼 수 있을지도 의문입니다.

그래도 해보고 좋은 소식으로 글 드리겠습니다^^;;

dag카드에서 퍼올릴 때에는 dag api를 사용해야 하는데 그게 fprobe랑도 잘 연결이 되야하는데 그게 가장 걱정입니다.(제 실력이 부족한 탓이겠죠ㅜㅠ)

여기는 오늘 호우 경보라서 하늘 뚫린듯 비가 내리고 있습니다.(경기도 수원)

오늘 하루도 건강하시고 하시는 일마다 잘되길 바랍니다.

다시한번 감사합니다. 좋은 저녁 보내세요^^;

youlovedj의 이미지

안녕하세요~

말씀하신대로 1, 2번과정까지 된거 같은데 확인할 방법이 없나요?

보니깐 dag에서 지원해주는 유틸중에 libpcap, fprobe, tcpdump 등이 있더라고요~

그래서 ./configure로 dag카드 사용하게 셋팅해주고 libpcap을 설치하고, 바로 tcpdump를 설치했습니다~

그리고 나서 #tcpdump -i dag0 -w [test_file] 명령을 쳐보니 dag카드와 잘 연동되어 캡쳐되는 것 같더라고요~

그 후에 fprobe를 설치했습니다.

일단 dag카드가 설치된 시스템에서 #fprobe -i dag0 xxx.xxx.xxx.xxx:xx 로 보내봤습니다~

collector는 없는 상태의 윈도우xp가 깔린 시스템입니다~~

어차피 flow가 생성되어 날라오는 지를 먼저 눈으로 확인하고 싶어서 wireshark 프로그램 띄워놓고 기다려봤습니다.

그런데 아무것도 날라오는게 없네요?^^;

그리고 원래 fprobe 명령어를 실행하면 아래와 같이 진행과정이라던지 아무것도 안보이는게 정상인가요??

[root@DAG fprobe-1.1]# fprobe -i dag0 203.255.252.144:2020
[root@DAG fprobe-1.1]#

일단 이것까지 확인되면 바로 collector 시스템 구축해서 뭔가 확인해보고 싶네요^^;

cflowd와 arts를 깔면 되는것 같더라고요~~

오늘 이것만 되면 정말 좋겠네요ㅎㅎ

다 mach님 도움 덕분입니다~~^^;

또 답변 기다리겠습니다~감사합니다^____^

mach의 이미지

30초(? 보통 netflow의 flow aggregation 주기) 정도 기다리면, fprobe가 데이터를 export하기 시작할 것입니다.
옵션이 있을 것입니다.

1) 먼저 보내는 측에서 tcpdump로 나가나(?) 검사하시고, 2) 수신측(윈도우+wireshark)은 그 다음이겠지요. 물론, 구간에 라우팅경로/방화벽등 점검하고....

[root@DAG fprobe-1.1]# fprobe -i dag0 20X.xxx.xxx.xxx:2020
[root@DAG fprobe-1.1]# tcpdump -i eth0 port 2020
이런 식이어야겠지요.

2) 만일, 나가지 않는다면? 이는 libpcap+dag가 비정상 동작인지를 확인할 필요가 있겠습니다.
[root@DAG fprobe-1.1]# tcpdump -i dag0
3) 2번이 아니라면, fprobe에 문제가(??) 있다고 가정해도 될 듯 합니다.
4) 차분하게 진행하세요.
* 공인 IP는 지우는게 좋겠습니다. :)
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

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

youlovedj의 이미지

답변 감사합니다~
IP부터 수정하려고 했는데 제 글 밑에 답글이 달려서 편집이 안됩니다ㅎㅎ
그리고 말씀하신 부분에 대해서 차분하게 진행해보겠습니다!!
제가 dag카드 수입사인 www.bow.co.kr 담당자와 연락하여 문의하여 보니 보통 패킷을 전수처리하여 flow를 생성하는 고객사는 못봤다고 합니다..ㅡ.ㅡ;
dag카드를 제조하는 endace사에서 나오는 ninjabox라는 것이 있다고 하네요..^^;
거기에 연결하면 패킷 싸그리 모아서 라우터와 같이 flow를 생성해 준다고 하더군요..ㅎ
저 나름대로 dag카드와 libpcap과 연동하는 것에대해서 고생고생했습니다만 도움주신 덕분에 그나마 잘 해낼 수 있던것 같습니다.
주말에 해보고 좋은 결과 또 드리겠습니다 ㅎ
저것이 잘 되면 그 다음단계로 달려가봐야지요~
편안한 주말 보내시길 바라며 제 IP를 지우기 위해 답글을 살짝 다른 곳으로 양보해주시면 더더욱 감사드리겠습니다^^;
질문하는 입장에서 불편드려 죄송합니다^______^;;;

mach의 이미지

.

...답글을 살짝 다른 곳으로 양보해주시면 ...

원하시면 삭제라도 해드리고 싶은데, http://kldp.org/node/95068
등을 읽고 지우고자/옮기고자 했으나, 안되는(?) 군요.
관리자님에게 문의하시면 될것 같습니다

dag카드 수입사인 <a href="http://www.bow.co.kr" rel="nofollow">www.bow.co.kr</a> 담당자와 연락하여 문의하여 보니 보통 패킷을 전수처리하여 flow를 생성하는 고객사는 못봤다고 합니다..ㅡ.ㅡ;
dag카드를 제조하는 endace사에서 나오는 ninjabox라는 것이 있다고 하네요..^^;
거기에 연결하면 패킷 싸그리 모아서 라우터와 같이 flow를 생성해 준다고 하더군요..ㅎ

국내에서는 대다수가 샘플링을 하는 것으로 알고 있습니다.
이유야 가지가지지만요.
제 글의 취지는 그럼에도 불구하고, 가능하다면... 이라는 뉘앙스를 가지고 있습니다.
몇몇 해외 유명 전문가의 언급을 인용한 말이기도 하겠지요.
그럼......

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

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

darkmyth의 이미지

제가 한번 만들어 본 경험이 있긴한데..

형식에 맞추어서 패킷을 만들면 되는데(pcap 이용)

시스템에서 10G를 트래픽을 처리할지 의문이네요.

netflow v1,3,5,8,9 아마 이렇게 맞을 꺼에요.

아참 그리고 매우 제한적이라고 말씀드리고 싶네요..

라우터 내부적으로 쓰이는 데이터 같은 것도 flow 필드에 있는데 그것들은

실질적으로 어떻게 할 수는 없습니다.

시스템에 직접 라우터를 구성 한다면 가능 합니다.

baboda4u의 이미지

netflow 표준은 공개되어 있으니 그에 해당하는 해더를 생성해서 만들면 될듯 하구요...

패킷 생성은 raw socket 사용해서 패킷 읽은 다음에 원하시는 flow로 조작해서 만들면 되지 않을까 하내요 ^^;

============================
Stay Hungry, Stay Foolish

============================
Stay Hungry, Stay Foolish

monovision의 이미지

netflow 는 표준으로 공개되어 있어 그냥 패킷을 만들어서 쏘면 됩니다. ;;;
그리고 잘 찾아보시면 스위치처럼 리눅스에서 그냥 netflow 를 보내주는 프로그램들도 있습니다.

Quote:

저는 DAG카드 8.2x를 사용하여 10G 망에 직접 연결하여 작업을 하고 있습니다~

가장 간단한 방법은 지금 연결된 스위치에서 netflow 기능을 켜버리면 됩니다. ^^

하지만 한가지 조심해야 할 것이 있습니다.
netflow 든 sflow 든 해당 기능은 스위치의 자원을 꽤나 잡아먹는 작업들입니다. 그래서 대게 샘플링을 하게 되는데요...
만약 적정한 수치 이상으로 커맨드를 줘버리면 스위치가 다운되는 현상까지 발생할 수 있습니다.
그것만 주의하시면.... 머... 서버단에서 처리를 하든 못하든 UDP 패킷이라 스위치에서는 별다른 문제가 없을 겁니다.

저도 지금 약 70G 에 해당하는 트래픽을 통계 내기위해서 오랜만에 netflow 를 보고 있는데 네트워크팀과 얽혀 있어서 갑갑한 상황입니다. >.<

결과 공유 부탁드립니다.~~ ^^

youlovedj의 이미지

일단 스위치나 라우터에서 생성되는 flow를 사용하면 안될것 같구요~~

제가 직접 끌어올리는 패킷을 이용해서 flow를 생성해야 합니다^^;

70G 트래픽은 어떻게 통계를 내나요?ㅎㅎ70G이상의 망이 있나보네요...>.<

현재 제 과제에 사용되는 시스템에 연결도니 망은 국가연구망 10G짜린데요..ㅋ

에고...모르는거 참 많습니다..저도 공유해드리면 좋겠어요..ㅎㅎ

댓글 달기

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