动机是我屋里有两台电脑,但到屋里只有一根外出网线,一台机子有双网卡,我就正好运用我前段学习的libpcap和libnet写了一个数据包转发的小工具,把双网卡的机子模拟成一个交换机,使另一台机子能通过它访问外网,虽然用其它方法以能实现,但这正好是一个练习上面说的两个工具的好地方,还有以可免除当双网卡机子不开机时,另一台机子只要直接接上外网的网线就行了,不用频繁的更改IP。
/*
net data packet transmit tools
* liujx
* 2007-4-1
*/
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#include < signal.h >
#include < netinet / ip.h >
#include < sys / time.h >
#include < net / ethernet.h >
#include < pthread.h >
#include < pcap.h >
#include < libnet.h >
#define IN_ETH "eth1"
char * dev_a, * dev_b;
pcap_t * pt_a, * pt_b;
pthread_t pid_a, pid_b;
libnet_t * net_a, * net_b;
static char errbuf[ 256 ];
void sigproc( int sig );
void * dev_a_capture( void * );
void dev_a_handle( u_char * devId, const struct pcap_pkthdr * h,
* liujx
* 2007-4-1
*/
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#include < signal.h >
#include < netinet / ip.h >
#include < sys / time.h >
#include < net / ethernet.h >
#include < pthread.h >
#include < pcap.h >
#include < libnet.h >
#define IN_ETH "eth1"
char * dev_a, * dev_b;
pcap_t * pt_a, * pt_b;
pthread_t pid_a, pid_b;
libnet_t * net_a, * net_b;
static char errbuf[ 256 ];
void sigproc( int sig );
void * dev_a_capture( void * );
void dev_a_handle( u_char * devId, const struct pcap_pkthdr * h,