0

サーバーからすべての着信ユーザー IP アドレスを取得しています。アドレスを取得してファイルに書き込みました。また、ファイルから IP アドレスをフィルター処理し、それらを変数 ip に取得しました。ただし、IPアドレスをmysqlデータベースにアップロードできない場合。

これまでのところ私はこれを持っていますが、うまくいきません。

with open("netstat.txt", 'rb') as f:
    for row in f.readlines()[1:]:
        columns = row.split()
        if len(columns) > 2:
            ip = row.split()[1]
            user = row.split()[2]
            ip = ip.strip('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
            con = mdb.connect('server', 'user', 'pass', 'db');

            with con:
                cur = con.cursor()
                cur.executemany("INSERT INTO Juliet_Data(ip,user) VALUES,(%s,%s)" % ip,user)

テーブルを次のように設定しています。

user = longtext
ip = blob

与えられたエラー:

    Traceback (most recent call last):
   File "C:\Documents and Settings\finance\Desktop\Server 
Monitoring\System Load Tracker\User Tracking\netstat.py", line 32, in 
<module>
     cur.execute("INSERT INTO Juliet_Data(ip) VALUES,(%s)" % ip)
   File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 174, in 
execute
     self.errorhandler(self, exc, value)
   File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, 
in defaulterrorhandler
     raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your 
SQL syntax; check the manual that corresponds to your MySQL server 
version for the right syntax to use near '()' at line 1")

サンプルの IP アドレスは、IP とユーザーのみに注目します。

 0.0.0.0:22             newjulietleft:0        LISTENING
   TCP    0.0.0.0:135            newjulietleft:0        LISTENING
   TCP    0.0.0.0:445            newjulietleft:0        LISTENING
   TCP    0.0.0.0:1311           newjulietleft:0        LISTENING
   TCP    0.0.0.0:3306           newjulietleft:0        LISTENING
   TCP    0.0.0.0:3389           newjulietleft:0        LISTENING
   TCP    0.0.0.0:5800           newjulietleft:0        LISTENING
   TCP    0.0.0.0:5900           newjulietleft:0        LISTENING
   TCP    0.0.0.0:47001          newjulietleft:0        LISTENING
   TCP    0.0.0.0:49152          newjulietleft:0        LISTENING
   TCP    0.0.0.0:49153          newjulietleft:0        LISTENING
   TCP    0.0.0.0:49154          newjulietleft:0        LISTENING
   TCP    0.0.0.0:49158          newjulietleft:0        LISTENING
   TCP    0.0.0.0:49170          newjulietleft:0        LISTENING
   TCP    10.22.22.22:139        newjulietleft:0        LISTENING
   TCP    10.22.22.22:3389       gregk:17415            ESTABLISHED
   TCP    10.22.22.22:49156      superman:microsoft-ds  ESTABLISHED
   TCP    10.22.22.22:49160      juliet:microsoft-ds    ESTABLISHED
   TCP    10.22.22.22:49164      pong:microsoft-ds      ESTABLISHED
   TCP    10.22.22.22:49165      ftpserve:microsoft-ds  ESTABLISHED
   TCP    10.22.22.22:50376      dbmlog:3306            ESTABLISHED
   TCP    10.22.22.22:50377      hulk:microsoft-ds      ESTABLISHED
   TCP    10.22.22.22:50383      julietz:netbios-ssn    TIME_WAIT
   TCP    10.22.22.22:50384    
4

2 に答える 2

3

,from afterはVALUES,無効です

構文エラーを受け取った場合、エラーが指している場所を確認するだけで済みます。このエラーは、スクリプト内の行ではなく、mysql 内で実行する最初のステートメントである挿入ステートメントであるため、混乱を招く可能性があります。

コメントの2番目の問題について:

次のようなパラメータ化を使用する必要があります。

VALUES (?, ?), (ip, user)

動作するはずです

于 2012-07-17T20:24:29.137 に答える
0
cur.executemany("INSERT INTO Julient_Data (ip,user) VALUES (%s,%s)", ((ip, user),)) 

cur.executemany("INSERT INTO Julient_Data (ip,user) VALUES (%s,%s)", ((ip, user),('192.168.1.1', 'test1')))
于 2014-08-05T02:04:45.770 に答える