[완료] 펄에서 Net::Pcap 모듈을 쓰려고 합니다.

mandugukbap의 이미지

펄에서 Pcap 모듈을 쓰려고 합니다.

Net::Pcap::open_offline을 통해 파일을 오픈하는 방법말고 입력 Stream을 통해 입력 받는 방법이 없을까요?

이렇게 하려는 이유는 데이터가 여러개로 나누어져 있고 기본적으로 pcap 포맷이 아닌 파일을 pcap파일로 변환하면서 입력 받기 위해서입니다.

즉, 아래와 같이 파일 오픈을 하는 코드를

my $pcapPayload = Net::Pcap::open_offline($pcapFile,\$error) 
 
while (my $pkt = Net::Pcap::next($pcapPayload, \%pcapHeader))
{
  ....
}

아래와 비슷한 방법으로 바꾸었으면 합니다.

while (my $pkt = Net::Pcap::get_packet_from_stream(STDIN, \%pcapHeader))
{
  ....
}

방법을 알려 주시면 감사 하겠습니다.

mandugukbap의 이미지

이게 의외로 어려운 문젠가 보군요.

keedi의 이미지

조건이 그러하다면...

- 데이터가 여러개로 나누어져 있고
- 파일을 변환하면서 입력 받기 위해

그렇다면 파일을 이름있는 파이프로 만들어서 쓰는 것은 어떨까요?
리눅스나 유닉스 계열의 시스템이라면

$ mknod my_named_pipe_name_here p

위와 같은 명령으로 파이프 파일을 생성하시고 스크립트에서는 해당 파이프 파일을 열거나 인자로 보내면 될 것 같습니다.

물론 생성한 파이프에는 쉘이나 다른 프로그램을 이용해서 파일을 다음처럼 보내주면 됩니다.

$ cat my_pcap_dumped_file_01 > my_named_pipe_name_here
$ cat my_pcap_dumped_file_02 > my_named_pipe_name_here
$ ...

----
use perl;

Keedi Kim

----
use perl;

Keedi Kim

aero의 이미지

pcap.pl

#!/usr/bin/env perl
use strict;
use warnings;
use Net::Pcap;
 
my $error;
my $pcapPayload = Net::Pcap::pcap_open_offline('/dev/stdin', \$error)
                      or die "Can't read file: $error\n";
my %pcapHeader;
while ( my $pkt = Net::Pcap::pcap_next($pcapPayload, \%pcapHeader)) {
    while ( my ($key, $val) = each %pcapHeader ) {
        print "$key => $val\n";
    }
    print "\n";
}

.
.

01.pcap이라는 패킷 덤프 파일이 있다면

$ cat 01.pcap | perl pcap.pl
len => 74
tv_usec => 136169
tv_sec => 1216281025
caplen => 74
 
len => 74
tv_usec => 136215
tv_sec => 1216281025
caplen => 74
 
len => 66
tv_usec => 136246
tv_sec => 1216281025
caplen => 66
 
.
.
.
.
이하 생략

위에서 cat 01.pcap 부분만 데이터를 나름대로 가공 후 덤프포멧으로 뿌리는 프로그램으로 교체하면 되겠죠?
mandugukbap의 이미지

두 분의 꿀같은 댓글 감사 드립니다.

아직 해 보진 않았지만 벌써 문제가 해결된 것이 느껴 집니다.

다시 한 번 정말 감사 드립니다.

댓글 달기

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