netinet/ip_var.h를 찾을 수 없다고 나오는데요^^
글쓴이: 후끈남 / 작성시간: 토, 2005/11/05 - 12:10오전
아흑^^
libpcap을 설치했는데요
저건 왜 없다고 나오져?? ^^;;
네이버에는 소스만 나오고 설명이 안나오고요^^;;
요기 kldp는 제 검색 능력이 딸려서 그런지^^ 아무것도 안나오고요 ㅠㅠ
구글도 검색이 별로 안되요^^
해결 방법 아시는분 좀 알려주세요^^
지금 www.joinc.co.kr도 디져보고 있는데 워나게 정보가 많아서 언제 찾을지 걱정만 되네요^^
Forums:
http://rpm.pbone.net/ 같은 곳에서 어떤 RPM에 속한
http://rpm.pbone.net/ 같은 곳에서 어떤 RPM에 속한 파일인지를 알 수 있습니다... 만, 웬 traceroute-debuginfo 패키지...-_-a 원하시는 건 아니겠군요.
libpcap을 설치하고서(RPM으로? 소스로?) 뭘 하셨길래(tcpdump 컴파일?) ip_var.h가 없다는 메시지를 보신 건지 얘기해 주시면 좋을 것 같습니다. 몇몇 소스를 둘러보니 ip_var.h는 리눅스에선 기본적으로 쓰이지 않는 헤더 파일인 듯 합니다.
$PWD `date`
libpcap]# gcc -o completePcap completePc
libpcap]# gcc -o completePcap completePcap.c -lpcap
completePcap.c:17:53: netinet/ip_var.h: 그런 파일이나 디렉토리가 없음
소스는^^
#include <stdio.h>
#include <pcap.h>
#include <sys/socket.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_var.h>
#include <netinet/tcp.h>
#include <net/if.h>
#include <netinet/if_ether.h>
#include <arpa/inet.h>
// filtering rule
#define FILTER_RULE "host 168.131.161.1"
#define PCAP_SNAPSHOT 1024
#define PCAP_TIMEOUT 100
void packet_view(unsigned char *, const struct pcap_pkthdr *, const unsigned char *);
int main(int argc, char *argv[]) {
char *dev;
char errbuf[PCAP_ERRBUF_SIZE];
bpf_u_int32 net;
bpf_u_int32 netmask;
struct in_addr net_addr, mask_addr;
pcap_t *pd;
struct bpf_program fcode;
if(!(dev = pcap_lookupdev(errbuf))) {
perror(errbuf);
exit(1);
}
if(pcap_lookupnet(dev, &net, &netmask, errbuf) < 0) {
perror(errbuf);
exit(1);
}
net_addr.s_addr = net;
mask_addr.s_addr = netmask;
printf("Device : %s\n", dev);
printf("Net Address : %s\n", inet_ntoa(net_addr));
printf("Netmask : %s\n", inet_ntoa(mask_addr));
if((pd = pcap_open_live(dev, PCAP_SNAPSHOT, 1, PCAP_TIMEOUT, errbuf)) == NULL) {
perror(errbuf);
exit(1);
}
if(pcap_compile(pd, &fcode, FILTER_RULE, 0, netmask) < 0) {
perror(pcap_geterr(pd));
exit(1);
}
// set filtering rule
if(pcap_setfilter(pd, &fcode) < 0) {
perror(pcap_geterr(pd));
exit(1);
}
// read packet forever
if(pcap_loop(pd, -1, packet_view, 0) < 0) {
perror(pcap_geterr(pd));
exit(1);
}
pcap_close(pd);
return 1;
}
/*
* packet_view
* print packets
*/
void packet_view(unsigned char *user, const struct pcap_pkthdr *h, const unsigned char *p) {
struct ip *iph;
struct ether_header *etherh;
unsigned short e_type;
// p가 ip header를 가리키도록 ethernet header의 크기만큼 증가 시킴
etherh = (struct ether_header *)p;
e_type = ntohs(etherh->ether_type);
if( e_type == ETHERTYPE_IP ) {
printf("ip \n");
p += sizeof(struct ether_header);
iph = (struct ip *) p;
// ip header의 정보를 출력
printf("SRC = %s\n", inet_ntoa(iph->ip_src));
printf("DST = %s\n", inet_ntoa(iph->ip_dst));
printf("IP Version = %d\n", iph->ip_v);
}else if( e_type == ETHERTYPE_ARP ) {
printf("arp \n");
}else if( e_type == ETHERTYPE_REVARP ) {
printf("rarp \n");
}else {
printf("no such type -> type : %d\n", e_type);
}
}
경험으로 진리를 쌓아라!!
^^
libpcap을 소스 설치 했구요^^
저건 간단한 패킷 분석하는 소스인듯^^
지금 공부하는 중이라서 정확히는 이정도 밖에 말씀 못드리겠네요^^
경험으로 진리를 쌓아라!!
소스를 다른 플랫폼에서도 컴파일 하셔야 하는 게 아니라면 ip_var.h
소스를 다른 플랫폼에서도 컴파일 하셔야 하는 게 아니라면 ip_var.h에 대한 include를 그냥 주석 처리 해주시면 됩니다:)
$PWD `date`
하핫^^ 감사드립니다^^ 해결되었습니다.
ㅎㅎ 주석 처리하면 되는군요^^
경험으로 진리를 쌓아라!!
댓글 달기