• 締切済み

Rubyでパケットの情報をDBに入れるプログラムを動かしております。

Rubyでパケットの情報をDBに入れるプログラムを動かしております。 以下のサイトにあるプログラムを実行しました。 http://www.db.is.kyushu-u.ac.jp/rinkou/libpcap/rubypacketdb.html エラーメッセージで、以下のように出力されました。 $ sudo ruby packet.rb drop table tcppackets... define table tcppackets... /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `initialize': table tcppackets already exists (SQLite3::SQLException) from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `new' from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `prepare' from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:220:in `execute_batch' from packet.rb:51 どうしたら良いか教えて頂けないでしょうか。

みんなの回答

回答No.1

table tcppackets already existsとなっていますので、 同じテーブルを再定義しようとしてエラーが発生しているように思われます。 テーブル作成は初回だけ行えばいいので、CREATE TABLEを消して 再度実行されてみてはいかがでしょうか? (SQLを作成している部分のコードをよく読まれることをお勧めします。)

monolith1978
質問者

お礼

>nekomikekamoさん 問題解決しました。 恥ずかしいことに、プログラムの転送モードをバイナリーにしており文字化けした改行コードが入っていました。Asciで転送したらうまくいきました。 コメントありがとうございました。

monolith1978
質問者

補足

回答ありがとうございます。 CreateTableのところをコメントアウトして実行したところ、以下のように出力されました。 実際に読み込んでいるpcapファイルの読み込みに失敗して、nilが返されたという理解でいいのでしょうか?pcapファイルの不備ですかね。Wiresharkではパケットがきちんと見ることが出来ます。 $ sudo ruby packet.rb drop table tcppackets... insert values... packet.rb:59 is calling SQLite3::Database#execute with nil or multiple bind params without using an array. Please switch to passing bind parameters as an array. /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `initialize': no such table: udppackets (SQLite3::SQLException) from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `new' from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:85:in `prepare' from /var/lib/gems/1.8/gems/sqlite3-ruby-1.3.1/lib/sqlite3/database.rb:127:in `execute' from packet.rb:59 from packet.rb:54:in `loop' from packet.rb:54

関連するQ&A