레이블이 Compile인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Compile인 게시물을 표시합니다. 모든 게시물 표시

2010년 8월 21일 토요일

tcpdump 컴파일 오류 - undefined reference to `pcap_parse'

앞서 소개한 포스팅에서 최신 버전의 tcpdump 로 확인하기 위하여 컴파일을 수행하다 발생한 에러에 대해 공유하고자 한다. 아마 개발 환경이 다 갖춰진 환경에서 컴파일이 되었다면 문제가 없었을 수도 있는 상황이었는데, 새로운 시스템에서 컴파일을 진행하다 보니 가벼운 문제가 있었다.

일단, libpcap 1.1.1 최신버전을 컴파일을 한후 다시 tcpdump 를 컴파일 하는 과정에서 아래와 같은 에러가 발생하였다.

./../libpcap-1.1.1/libpcap.a(gencode.o): In function `.L154':
gencode.c:(.text+0x7a4): undefined reference to `pcap_parse'
collect2: ld returned 1 exit status

pcap_parse 가 undefined 라고 나오는데, 오브젝트 파일에서 심볼을 확인해 보았더니 문제가 없었다. config.log 를 살펴보니

configure:9759: gcc -o conftest -DINET6 -g -O2   conftest.c ./../libpcap-1.1.1/libpcap.a   >&5
./../libpcap-1.1.1/libpcap.a(gencode.o): In function `.L154':
gencode.c:(.text+0x7a4): undefined reference to `pcap_parse'
collect2: ld returned 1 exit status
configure:9765: $? = 1
configure: failed program was:

확실히 에러를 확인할 수 있었다. 일단, pcap 라이브러리의 문제가 의심되어 모두 싹 지우고 새롭게 컴파일을 하고 tcpdump 컴파일을 다시 하니, 깔끔하게 된다. 아니, 특별히 건드린 부분도 없는데 말이다.

이전에 컴파일 상황은 bison, flex 같은것이 설치되어 있지 않아, configure 를 해 보고 없는 것이나 make 에서 없는 것을 그때그때마다 설치해 진행한 상황이었다. 그래서 이 부분이 꼬였었나 보다.

문제를 해결하고 보니 참 허무하다. 다시 쏵 지우고 컴파일을 한 것 밖에 없는데 말이다. 처음에는 이것저것 다 뒤져보느라 약간 시간을 허비했는데, 역시나 처음으로 부터 다시 돌아가 시작하는 것이 정답이었던 것인가 -.-

이런 에러를 똑같이 경험하실 분들을 위해 기록을 남겨놓으니 참고하길 바란다. 컴파일 전에 다음과 같은 부분이 설치 되어 있는지 먼저 확인하고 진행하면 큰 무리 없을 것이다.

flex
bison

우분투/데비안 계열 사용자라면 다음과 같은 형태면 문제 없을 것이다.

# apt-get install build-essential flex bison
그럼, 같은 에러를 겪은 분들에게 도움이 되기를 바라며.

P.S 구글링 해보면 비슷한 에러메시지가 나오기에 도움이 되지 않을까 생각한다.

2010년 8월 4일 수요일

리눅스 환경의 간단한 와이어샤크 컴파일은...

바로 전 포스팅에서 tshark 를 약간 수정하여 사용하는 부분에 대해서 설명하였다.


여기에 추가로 컴파일 과정에 대해서 간단히 덧붙이고자 한다. 컴파일은 *NIX 환경에서 한 것이고, 컴파일 전에
필요한 패키지들이 있다. 나의 경우는 기본으로 설치된 리눅스 환경에서, 필요한 패키지는 다음과 같은 것들이 있었다.

bison
flex
pkg-config
libglib

APT 패키지 설치가 가능한 환경이라면,
# apt-get install bison 과 같이 쉽게 설치가 가능하므로, ./configure 를 하는 과정에서 무엇이 없다고 하면
# apt-cache search pkg_name 으로 해서 찾아보면 쉽게 설치가 가능하다. X-Windows 가 설치되어 있지 않아
굳이 GUI 기반의 와이어샤크는 필요없었기에 --enable-wireshark=no 옵션으로 컴파일을 제외했고, GTK 도
사용안 하므로 --disable-gtktest 옵션을 주었다.

그럼 다음과 같이 컴파일을 위한 환경 준비를 위해 configure 를 실행해 주면 된다.

$ ./configure --enable-wireshark=no --disable-gtktest
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
.
. (삭제)
The Wireshark package has been configured with the following options.
                    Build wireshark : no
                       Build tshark : yes
                     Build capinfos : yes
                      Build editcap : yes
                      Build dumpcap : yes
                     Build mergecap : yes
                    Build text2pcap : yes
                      Build idl2wrs : yes
                      Build randpkt : yes
                       Build dftest : yes
                     Build rawshark : yes

             Install dumpcap setuid : no
                        Use plugins : yes
                    Use lua library : no
                   Build rtp_player : no
                        Use threads : no
             Build profile binaries : no
                   Use pcap library : yes
                   Use zlib library : yes
                   Use pcre library : no
               Use kerberos library : no
                 Use c-ares library : no
               Use GNU ADNS library : no
                Use SMI MIB library : no
             Use GNU crypto library : no
             Use SSL crypto library : no
           Use IPv6 name resolution : yes
                 Use gnutls library : no
     Use POSIX capabilities library : no
                  Use GeoIP library : no
$ make
$ make install


위 결과를 보는 것과 같이 와이어샤크는 컴파일하지 않는다고 "no" 가 나왔고 기타, 다른 라이브러리나
컴파일 되는 패키지 정보가 나온다. 즉, 본인이 사용하고자 하는 기능에 따라 해당 라이브러리도 있어야 되므로
configure 시 적절히 추가해 주어야 한다. 예를 들어, GeoIP 를 사용하겠다고 하면 --with-geoip=[경로] 옵션이
필요하게 된다. 사용가능한 옵션은

$ ./configure --help

로 확인할 수 있다. 와이어샤크는 오픈소스인 만큼 소스를 자유롭게 사용가능하므로 원하는 형태로
자유롭게 기능을 추가하거나 제거할 수 있다. 바로 이것이 오픈소스의 매력이며,
여러분들만의 와이어샤크를 만들어 볼 수 있는 기회를 줄것이다.

이전 포스팅에서 사용한 컴파일에 대해서 간략하게 소개한 것이므로, 좀더 깊게 컴파일 과정을 소개할 기회가
되는 대로 준비하겠다.

2010년 8월 2일 월요일

패킷 오픈 중 'appears to have been cut short in the middle of a packet' 메시지가 나타난다면..

와이어샤크 또는 tshark 를 사용하다 보면 패킷이 중간에 끊기어 다음과 같은 메시지를 보는 경우가 있다.

$ tshark -q -z io,phs -r test.pcap
tshark: "test.pcap" appears to have been cut short in the middle of a packet.

tshark 를 사용해 로드하는데 메시지가 패킷중간이 잘린것 같다고 나온다. GUI 환경의 와이어샤크에서도
이런 메시지가 나온다. 이유는, 코드 상에서 로드하다가 이런 경우가 발생되면 빠져나가도록
되어 있기 때문이다. 하지만 때로는, 어쩔수 없이 이런 패킷을 많이 봐야 할 경우도 생긴다.
(와이어샤크로 보는 경우라면 말이다)
특히 유닉스 상에서 덤프를 하는데 tcpdump 와 같이 패킷 덤프를 저장하다가 kill 로 해당 프로세스를 죽이지 않고 kill -9 와 같이 하는 경우는 이런 경우가 종종 발생한다.

일단 소스를 재 컴파일 해야 하는데, 일단 tshark 를 기준으로 설명한다. GUI 기반으로 컴파일 하려면 이것저것 더 필요한 것들이 많아서 귀차니즘으로 tshark 를 기준으로 한다. 물론, GUI 환경으로 컴파일이 다 준비되었다면 똑같이 wireshark 소스코드를 찾아 바꾸면 될 것이다.

와이어샤크 최신버전인 1.2.9 의 경우는 tshark.c 의 2279 라인을 보면 된다.

    case WTAP_ERR_SHORT_READ:
      cmdarg_err("\"%s\" appears to have been cut short in the middle of a packet.",
                 cf->filename);
//      break;    ---> 이 부분을 "//" 로 주석처리한다.
        return 0;     ---> 그리고 리턴 시켜준다.

break; 라고 되어 있는 부분을 주석처리 하면 된다. 이것은 일부로 에러가 발생해도 계속 동작하도록
수정하는 것이다. 나의 경우는 이런 것이 필요하여 코드를 보다가 이렇게 간단히 수정하여 사용하고 있다.

아래와 같이 실행하면 에러 메시지는 나와도 결과를 볼 수 있다. 필요하면 좀더 자기 입맛에 맞도록 수정하면 된다.
# ./tshark -q -z io,phs -r test.pcap
tshark: "test.pcap" appears to have been cut short in the middle of a packet.

===================================================================
Protocol Hierarchy Statistics
Filter: frame

frame                                    frames:394341 bytes:49686922
  eth                                    frames:394341 bytes:49686922
    ip                                   frames:394341 bytes:49686922
      tcp                                frames:394318 bytes:49683678
        http                             frames:78864 bytes:31308464
          data-text-lines                frames:39431 bytes:26418684
      udp                                frames:23 bytes:3244
        dns                              frames:20 bytes:2499
        nbdgm                            frames:3 bytes:745
          smb                            frames:3 bytes:745
            mailslot                     frames:3 bytes:745
              browser                    frames:3 bytes:745
===================================================================
필요에 의해서 간단하게 언급을 해 보았는데, 기회가 되면 다음번에 컴파일 과정에 대해서도 소개하도록 하겠다.