#include #include #include #include #include #include "pktlib.h" int main(int argc, char *argv[]) { pktif_t pktif, p; int r, rate = 0; char buffer[65536]; argc--; argv++; if (isdigit(argv[0][0])) { /* 数値が指定された場合 */ rate = atoi(argv[0]); /* パケット廃棄率 */ argc--; argv++; srand(time(NULL)); } while (argc> 0) { /* 複数インターフェースをオープンする */ /* インターフェースをオープンする(自発パケットは受信しない) */ pktif_open(argv[0], PKTIF_OPEN_FLAG_RECV_NOTSENT, 0); argc--; argv++; } while (1) { pktif = pktlib_iflist_select(-1); /* 複数インターフェースで待ち受け */ if (pktif == NULL) continue; r = pktif_recv(pktif, buffer, sizeof(buffer), NULL); /* パケットを受信 */ if (r <= 0) continue; if ((rate> 0) && ((rand() % rate) == 0)) continue; /* 指定された確率でパケットを廃棄する */ for (p = pktlib_iflist_get_list(); p; p = pktif_get_next(p)) { if (p != pktif) /* 受信インターフェース以外のすべてに転送する */ pktif_send(p, buffer, r); /* パケットを送信 */ } } return 0; }

AltStyle によって変換されたページ (->オリジナル) /