| Bowen 的个人资料djkfjdkjfkdjfk日志列表 | 帮助 |
djkfjdkjfkdjfk6月30日 flow extract/* * Extract flow information from libpcap dump files * * * Copyright 2002, 2003, 2004 Remco van de Meent, University of Twente * * Author: * Remco van de Meent <r.vandemeent@utwente.nl> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include <stdio.h> #include <getopt.h> #include <errno.h> #include <stdlib.h> #include <pcap.h> #include <netinet/in.h> #include <net/ethernet.h> #include <netinet/ip.h> #include <netinet/udp.h> #include <netinet/tcp.h> #include <malloc.h> #include <glib.h> #include <string.h> void pkt_callback(unsigned char *, const struct pcap_pkthdr *, const unsigned char *); int dump_remove_all(gpointer, gpointer, gpointer); void free_key(gpointer); void free_flowinfo(gpointer); /* global variables */ pcap_t *p; unsigned long int pkt_counter; struct timeval ts_flushed; char *flowdb = NULL; int flowtimeout = 20; GHashTable *active; unsigned long int f_index = 1; int f_dumped = 0; unsigned long int fragdrops = 0; unsigned long int fragdropsize = 0; int lsec = 0; struct f_info_t { unsigned long int index; unsigned long int bytes_in; unsigned long int bytes_out; unsigned long int pkts_in; unsigned long int pkts_out; struct timeval ts_first; struct timeval ts_last; }; int main(int argc, char *argv[]) { extern char *optarg; extern int errno, optind; char *dumpfile = NULL; char *t_char; int t_int; /* process arguments */ while ((t_int = getopt(argc, argv, "f:t:o:")) != EOF) switch (t_int) { case 'f': dumpfile = optarg; break; case 't': flowtimeout = atoi(optarg); if ((flowtimeout > 900) || (flowtimeout < 1)) { fprintf(stderr, "Flowtimeout should be between 1 and 900 seconds\n"); exit(1); } break; case 'o': flowdb = optarg; break; default: fprintf(stderr, "Usage: %s -f <dumpfile> -o <outfile> [-t <flowtimeout>\n", argv[0]); exit(1); } argc -= optind; argv += optind; if ((argc != 0) || (dumpfile == NULL) || (flowdb == NULL)) { fprintf(stderr, "Usage: %s -f <dumpfile> -o <outfile> [-t <flowtimeout>\n", argv[0]); exit(1); } fprintf(stderr, "Reading from %s with flowtimeout %d seconds\n", dumpfile, flowtimeout); /* open dumpfile */ p = pcap_open_offline(dumpfile, t_char); if (!p) { fprintf(stderr, "Could not open dumpfile %s\n", t_char); exit(1); } /* initialize counters */ pkt_counter = 0; ts_flushed.tv_sec = 0; ts_flushed.tv_usec = 0; /* create hash containing active flows */ active = g_hash_table_new_full(g_str_hash, g_str_equal, free_key, free_flowinfo); /* callback for all packets */ if (pcap_loop(p, -1, &pkt_callback, NULL) < 0) { fprintf(stderr, "Error while processing dumpfile %s: %s\n", dumpfile, pcap_geterr(p)); exit(1); } fprintf(stderr, "\n\nFinished processing dumpfile %s, processed %ld packets\n", dumpfile, pkt_counter); fprintf(stderr, "Dropped %lu fragmented packets, total %lu bytes\n", fragdrops, fragdropsize); g_hash_table_foreach_steal(active, dump_remove_all, NULL); exit(0); } void deltatime(struct timeval *result, struct timeval *high, struct timeval *low) { /* set result intially to zero */ memset(result, 0, sizeof(struct timeval)); if (high->tv_sec == low->tv_sec) { result->tv_sec = 0; result->tv_usec = high->tv_usec - low->tv_usec; } else { result->tv_sec = high->tv_sec - low->tv_sec; if (high->tv_usec >= low->tv_usec) { result->tv_usec = high->tv_usec - low->tv_usec; } else { result->tv_sec -= 1; result->tv_usec = high->tv_usec - low->tv_usec + 1000000; } } return; } int check_flow_age(gpointer k, gpointer x, gpointer d) { char *key = (char *) k; struct f_info_t *v = (struct f_info_t *) x; struct timeval *ts_cur = (struct timeval *) d; struct timeval res; /* check for aging flow */ deltatime(&res, ts_cur, &v->ts_last); if (res.tv_sec >= flowtimeout) { void *k_orig; char *t_src_ip, *t_dst_ip, *t_proto, *t_src_port, *t_dst_port; k_orig = k; printf("\nFlow (index %lu)\n", v->index); printf(" key: %s\n", (char *) k); /* 'decode' key */ t_src_ip = g_strndup((char *) k, 10); k += 10; t_dst_ip = g_strndup((char *) k, 10); k += 10; t_proto = g_strndup((char *) k, 2); k += 2; t_src_port = g_strndup((char *) k, 5); k += 5; t_dst_port = g_strndup((char *) k, 5); printf(" src ip: %llx\n", atoll(t_src_ip)); printf(" dst ip: %llx\n", atoll(t_dst_ip)); printf(" proto: %d\n", atoi(t_proto)); printf(" src_port: %ld\n", atol(t_src_port)); printf(" dst_port: %ld\n", atol(t_dst_port)); printf(" bytes_in: %lu\n", v->bytes_in); printf(" bytes_out: %lu\n", v->bytes_out); printf(" bytes_total: %lu\n", v->bytes_in + v->bytes_out); printf(" pkts_in: %lu\n", v->pkts_in); printf(" pkts_out: %lu\n", v->pkts_out); printf(" ts_first: %ld %ld\n", v->ts_first.tv_sec, v->ts_first.tv_usec); printf(" ts_last: %ld %ld\n", v->ts_last.tv_sec, v->ts_last.tv_usec); deltatime(&res, &v->ts_last, &v->ts_first); printf(" duration: %ld %ld\n", res.tv_sec, res.tv_usec); free(t_src_ip); free(t_dst_ip); free(t_proto); free(t_src_port); free(t_dst_port); k = k_orig; // free(v); // free(k); f_dumped++; return (1); /* remove this one */ } return (0); /* don't remove */ } int dump_remove_all(gpointer k, gpointer x, gpointer d) { struct f_info_t *v = (struct f_info_t *) x; struct timeval res; void *k_orig; char *t_src_ip, *t_dst_ip, *t_proto, *t_src_port, *t_dst_port; k_orig = k; printf("\nFlow (index %lu)\n", v->index); printf(" key: %s\n", (char *) k); /* 'decode' key */ t_src_ip = g_strndup((char *) k, 10); k += 10; t_dst_ip = g_strndup((char *) k, 10); k += 10; t_proto = g_strndup((char *) k, 2); k += 2; t_src_port = g_strndup((char *) k, 5); k += 5; t_dst_port = g_strndup((char *) k, 5); printf(" src ip: %llx\n", atoll(t_src_ip)); printf(" dst ip: %llx\n", atoll(t_dst_ip)); printf(" proto: %d\n", atoi(t_proto)); printf(" src_port: %ld\n", atol(t_src_port)); printf(" dst_port: %ld\n", atol(t_dst_port)); printf(" bytes_in: %lu\n", v->bytes_in); printf(" bytes_out: %lu\n", v->bytes_out); printf(" bytes_total: %lu\n", v->bytes_in + v->bytes_out); printf(" pkts_in: %lu\n", v->pkts_in); printf(" pkts_out: %lu\n", v->pkts_out); printf(" ts_first: %ld %ld\n", v->ts_first.tv_sec, v->ts_first.tv_usec); printf(" ts_last: %ld %ld\n", v->ts_last.tv_sec, v->ts_last.tv_usec); deltatime(&res, &v->ts_last, &v->ts_first); printf(" duration: %ld %ld\n", res.tv_sec, res.tv_usec); free(t_src_ip); free(t_dst_ip); free(t_proto); free(t_src_port); free(t_dst_port); k = k_orig; // free(v); // free(k); return (1); /* remove this one */ } void free_key(gpointer d) { char *k = (char *) d; free(k); return; } void free_flowinfo(gpointer d) { struct f_info_t *v = (struct f_info_t *) d; // free(v); return; } void pkt_callback(unsigned char *t_char, const struct pcap_pkthdr *hdr, const unsigned char *pkt) { struct ether_header *ep; struct iphdr *ip; unsigned long int sport, dport; struct udphdr *udp; struct tcphdr *tcp; struct timeval t_ts; char *f_key; struct f_info_t *f_info, *t_val; int f_rev = 0; /* increment packet counter */ pkt_counter++; /* discard non-IP packets */ ep = (struct ether_header *) pkt; if (ntohs(ep->ether_type) != 0x0800) return; /* skip ethernet header */ pkt += 14; ip = (struct iphdr *) pkt; /* discard non-UDP/non-TCP packets */ if ((ip->protocol != 6) && (ip->protocol != 17)) return; /* discard second, third, etc. fragments */ if ((ip->frag_off & 0xff00) > 0) { fragdrops++; fragdropsize += hdr->len; return; } /* if this is the first packet, set time stamps */ if (ts_flushed.tv_sec == 0) { ts_flushed.tv_sec = hdr->ts.tv_sec; ts_flushed.tv_usec = hdr->ts.tv_usec; } /* for every 1000th packet we print a dot and determine if flow dumping is required */ if ((pkt_counter % 1000) == 0) { fprintf(stderr, "."); deltatime(&t_ts, (struct timeval *) &hdr->ts, &ts_flushed); if (t_ts.tv_sec >= 1) { /* remove old flows */ lsec += 1; fprintf(stderr, "\n[%d] (time %lu %lu): ", lsec, hdr->ts.tv_sec, hdr->ts.tv_usec); g_hash_table_foreach_steal(active, check_flow_age, (void *) &hdr->ts); fprintf(stderr, "%d dumped, %d active\n", f_dumped, g_hash_table_size(active)); ts_flushed.tv_sec = hdr->ts.tv_sec; ts_flushed.tv_usec = hdr->ts.tv_usec; f_dumped = 0; } } /* skip ip hdr */ pkt += ip->ihl * 4; /* determine transport layer ports */ switch (ip->protocol) { case 6: /* tcp */ tcp = (struct tcphdr *) pkt; sport = ntohs(tcp->source); dport = ntohs(tcp->dest); break; case 17: /* udp */ udp = (struct udphdr *) pkt; sport = ntohs(udp->source); dport = ntohs(udp->dest); break; } /* construct char with flow key */ f_key = (char *) malloc(sizeof(char) * 33); memset(f_key, 0, sizeof(f_key)); sprintf(f_key, "%.10lu%.10lu%.2d%.5ld%.5ld%s", (long unsigned int) ntohl(ip->saddr), (long unsigned int) ntohl(ip->daddr), ip->protocol, sport, dport, "\0"); /* lookup flowkey and reverse flowkey in hash table */ t_val = g_hash_table_lookup(active, f_key); if (!t_val) { char *fr_key; fr_key = (char *) malloc(sizeof(char) * 33); memset(fr_key, 0, sizeof(fr_key)); sprintf(fr_key, "%.10lu%.10lu%.2d%.5ld%.5ld%s", (long unsigned int) ntohl(ip->daddr), (long unsigned int) ntohl(ip->saddr), ip->protocol, dport, sport, "\0"); t_val = g_hash_table_lookup(active, fr_key); if (t_val) { f_rev = 1; /* reverse flow */ free(f_key); f_key = fr_key; } else { free(fr_key); } } if (!t_val) { /* flow does not exist in active flow hash table */ f_info = (struct f_info_t *) malloc(sizeof(struct f_info_t)); memset(f_info, 0, sizeof(struct f_info_t)); f_info->index = f_index++; f_info->bytes_out = hdr->len; f_info->pkts_out = 1; f_info->ts_first.tv_sec = f_info->ts_last.tv_sec = hdr->ts.tv_sec; f_info->ts_first.tv_usec = f_info->ts_last.tv_usec = hdr->ts.tv_usec; g_hash_table_insert(active, f_key, f_info); } else { /* flow exists in active flow hash table, update values */ if (f_rev) { t_val->bytes_in += hdr->len; t_val->pkts_in += 1; } else { t_val->bytes_out += hdr->len; t_val->pkts_out += 1; } t_val->ts_last.tv_sec = hdr->ts.tv_sec; t_val->ts_last.tv_usec = hdr->ts.tv_usec; g_hash_table_replace(active, f_key, t_val); } return; } 6月24日 东野圭吾的作品东野圭吾的作品1985 年 《放学后》 (第31 届江户川乱步赏)(1986年被拍摄成电影) 1986 年 《毕业——雪月花杀人游戏》 《白马山庄杀人事件》 1987 年 《学生街里的杀人事件》 《11 文字的杀人》 1988 年 《浪花少年侦探团》 《以眨眼干杯》 《魔球》 1989 年 《杀人现场在云端? 《沉睡的森林》(特别说明:并不是木村拓哉主演的那部电视剧) 《布鲁特斯的心脏——完全犯罪杀人接力》 《十字豪宅的小丑》 《鸟人计划》 1990 年 《宿命》*(2004年拍摄日剧SP,柏原崇、藤木直人主演) 《没有犯人的杀人夜晚》 《侦探俱乐部》 《面具山庄杀人事件》 1991 年 《变身》(2004年拍摄电影,玉木宏、苍井优主演) 《回廊亭杀人事件》 《天使之耳》 1992 年 《雪地杀机》 《美丽的凶器》 1993 年 《同班的同学》 《分身》 《和阿忍老师说再见——浪花少年侦探团·独立篇》 1994 年 《过去我死去的家》 《操纵彩虹的少年》 《怪人们》 1995 年 《天空之蜂》 《平行世界的爱的故事》 《怪笑小说》 《那个时候我们是傻瓜》(散文集) 1996 年 《谁杀了她》 《名侦探的守则》 《名侦探的诅缚》 《毒笑小说》 《恶意》*(1996年拍摄日剧,佐佐木藏之介主演) 1998 年 《秘密》 (第52 届日本推理作家协会奖、第120 届直木奖入围)(1998年拍摄电影,广末凉子主演) 《侦探伽利略》*(2007年拍摄日剧,福山雅治、柴崎幸主演) 1999 年 《我杀了他》 《白夜行》* (第122 届直木奖入围)(2006年拍摄日剧,山田孝之、绫濑遥主演) 2000 年 《预知梦》*(2007年拍摄日剧,福山雅治、柴崎幸主演) 《再一个谎言》 2001 年 《超·杀人事件》* 《单恋》* (第125 届直木奖入围) 2002 年 《湖边凶杀案》*(2002年拍摄电影,药师丸博子、丰川悦司主演) 《时生》 《绑架游戏》*(2003年拍摄电影、藤木直人、仲间由纪惠主演) 2003 年 《我是非常勤》 (注:本书书名和「 非常勤」(中文意为兼任)同音,是创作者特别设定的双关语趣味) 《杀人之门》* 《信件》* (第129 届直木奖入围)(2005年拍摄电影,山田孝之、泽尻绘里香主演) 2004 年 《幻夜》 (第131 届直木奖入围) 《挑战?》(散文集) 《彷徨的刀刃》 2005 年 《黑笑小说》 《嫌疑犯X 的献身》* (第134 届直木奖、第6 届本格推理小说大奖)(2008年拍摄电影,福山雅治主演) 2006 年 《梦回杜林》(散文集) 《红色手指》 3月22日 影响力 所有对我重要的人都对我有着重要的影响力,而这正是让我不舒服的东西——被影响。影响力是一种压力。当感情产生影响力的时候,也就成为一种压力。但是如果一种感情对我毫无影响力,不是正说明我不在乎这种感情?也许这种矛盾,是我的性格悲剧?渴望自由的同时,也渴望被爱。如果有一天这二者不能调和,我该怎么选择?有两全其美的答案么?或者说,有自由的爱么?可是这样假设,又回到了刚才那个矛盾:如果能包容自由则说明爱的程度不深,如果爱之深切则难免会产生束缚。 5月21日 从人大博导之死看自杀文化的阴谋zz
学者余虹死了。与此君断然弃世形成鲜明对照的是,越来越多的人在发现他与这个世界曾经有过的千丝万缕的牵系。“理想主义者的最后一跃”?“按照他认为
美的方式去生长”?在种种猜测或者抽象的演绎中,余虹的遗照沉静而超迈,视线所及,跳过很多人的头顶。我想,有着这样一幅沉静面容的人,大概,无论他做出
什么样的举动,他的行为都是可以解释的。 生与死,一向是吾国知识分子终其一生,都在竭力参详的大命题。千年以降,因为独立人格、自由生命的缺失,传统知识分子的生与死,往往也缺乏独立与自由的 品格。肉体的生命、现实的价值乃至文化的人格,都操纵在别人那里,按照别人的意志存在或者消亡。正所谓,“平时袖手谈心性,临难一死报君王”,此种恶名, 便是这种畸形人格的极端体现。 此种人格发展到极致,则是王国维先生的自沉。或者说,王国维先生在现代社会破晓时分的选择,为此前的时 代、此前的知识分子做了一个小结,以一己之身殉了千年道统。其选择使曾经的圆融通达再度回归,“道不行,乘桴浮于海”,“达则兼济天下,穷则独善其身”, 生命中解决了怎么生的问题,死的问题似乎暂时不再困扰中国传统知识分子的选择了。 再往后,西方的生命哲学渗透进来,我们也有了“诗人 之死”。在决绝的放弃姿态中,在一缕一缕微茫的血色中,我们沉痛地发现,诗人们在找回独立人格、自由生命的同时,也毫不爱惜地把它们抛掷了。余虹说,“拒 绝一种生活也是一个人的尊严与勇气的表示,它比那些蝇营狗苟的生命更像人的生命。”问题是,生命尊严如果以失去生命获得,又是怎样伤痛的悖论呢? 1994年4月的一个雷雨之夜,年仅34岁的文学博士胡河清以“惊叹号的方式”(李劼语)放弃了自己的生命。胡河清君容貌清雅,沉郁中深藏着热烈;其文 更是灵动晶莹,底气足足,端的是文气通脱,以才驭识,才识俱佳,当属评论家王干界定的“南方文体”,“是一种与河流湖泊相对应的文体。”当年我第一次撞见 胡河清的文字时,惊艳和痛惜一并袭来,几乎失语。 我还记得,当时以及其后的很多论者,都在描述胡河清君的精神高洁,“他的死仍然是生 命的胜利,他用自己的死证明世界上没有任何东西可以损毁生命的尊严和骄傲。”(王雪瑛《混沌与透明》)更有论者甚至把他比作怒触不周之山的文化共工,“使 天地为之撼动”。当时的我,在受到震撼的同时,并没有想太多、太清楚,思想仍更多停留在胡河清精美的文本上。 然而,在听到了接二连三 的“诗人之死”的消息后,渐渐地,我嗅到了一丝不祥的气息。钱钟书先生评价胡河清的文章是“追寇如巢穴”、“刁无锡”,我没有那样的文化功力,但透过纷纷 攘攘的对于诗人之死的悼念文章,我感觉到,歌颂以死亡求得生命尊严的论调,似乎隐含着一种类似于“谋杀”的意味。对胡河清如此,对海子如此,对现在的余 地、余虹也大都如此。 我还不无悲哀地发现,这种鼓励放弃、歌颂自杀的论调俨然已经形成一种“自杀文化”。似乎只有放弃了自己肉身的生 命,才是有尊严的生命,才能剔除日常生活的繁琐和平庸,才能够充分表达与这个社会越来越严重的庸俗化倾向的不合作。这样的“自杀文化”,在种种繁缛、精美 的包装下,堂而皇之的穿行在社会中间,正在或者已经侵入很多人的生命意识中。 学者王晓明曾经说;“胡河清式的情绪,我们心中或多或少 都有一些。自然,我总会迅速掐灭这类念头,即便一时掐不干净,也总是尽量将它压入心底。”这样诚恳的话语,在激烈的青春的决绝的语境下,却往往被认为是迂 腐的,庸常的,缺乏独立人格的。大众似乎更愿意接受“文化守灵人”这样大且悲壮的语词。1994年,胡河清是守灵人;2007年,轮到余虹守灵了。 我们尊重死者的选择,但我们不能放纵我们情绪中最为激烈、也最为恶劣的那一部分。很多人在猜测余虹的死因时,都引用了福柯的一句话,“一个人,最重要的 作品就是他自己。”试图以此来印证余虹的最后选择是在“自己完成自己”,可是,福柯的这句话为什么不能理解为对生命的珍重呢?为什么“对生命的礼赞”、寻 找人文精神就只能以“非正常方式”进行呢? 临界那一刹那,余虹的心态无人可知,胡河清的心态也无人可知。惟其不可知,故不可强作解 人;更不可以别人的决绝来释放自己的情怀,说什么“选择哪站下车,无所谓”的风凉话,借着他人的血光,强调所谓唯美的、理想主义的死。我们当然要个体生命 的尊严、要纯粹的自由、要理想的社会制度安排,但决不应该鼓励什么“毫不妥协的方式”,那是阴谋。 “天行健,君子以自强不息”,“生 生不息之为易”,这样的来自传统文化最核心层面的教谕,在一代一代的传承中,也为中国传统文化注入了强健的生命力,同时,也成为中国知识分子在对待生与死 的两难选择时的最好姿态。逝者余虹已经远远的离去了,无论说什么,都只是言说者情绪的释放。惟愿那些智者的“自杀文化”离我们远一些,不要拿余虹的酒杯, 浇自家块垒。(来源:红网 作者:胡印斌) 5月16日 一场人生一场梦看了人大话剧团的毕业大戏,楼梯的故事。住在同一间公寓楼里的四户人家,他们过着平凡而单调的生活,每天需要在楼梯上爬上爬下。年青的一代不愿意重复老人们的生活轨迹,他们向往爱情和幸福,他们为自己的未来勾画着美好的蓝图。十年过去了,当年的年轻人依然生活在这里,每天依然要爬同样的楼梯。爱情,消散了;幸福,远去了。他们重复老一辈人的生活,虽然有抱怨和不甘,却在现实面前屈服了。又过去了十年,还是在同样的楼梯上,新的一代年轻人长大了,他们追逐着仿佛触手可及的幸福,他们一样充满了对爱情的渴求和对未来的抱负。一切的一切,多么的相似,就好像那该死的楼梯一样,不曾改变。 这就是我们的人生么?今天我们的梦想的、期待的、追逐的一切,都必将离我们远去么?就像那片刻都不肯停歇的时针,滴答、滴答,一秒一秒的谋杀我们的青春。如果一切早已注定,我们只能在不断的重复中慢慢老去,如果生命就是一个可笑的圆圈,我们只能在原地盲目地自欺欺人,如果人生就是一场梦。我选择离去。 12月3日 黄纪苏:在凤凰卫视谈《色戒》在凤凰卫视谈《色戒》
我以往不参与任何电视节目,因为不喜欢那里的气氛。这回凤凰卫视邀我去说《色戒》,先没答应,后来还是去了,主要是因为不满主流媒体对这部片子的一片叫好。1999年美国狂轰滥炸南联盟(炸使馆前),我也到公安局申请过游行,也无非是想让西方知道,不是中国所有知识分子都跟着星条旗走。
到了地方我才明白“一虎一夕谈”是哪几个字,先我还以为是“一呼一吸”呢。节目的形式比较脂粉气,属于我见了就要换台的娱乐类。我随身带去一张抗日女烈士成本华临刑前的照片,我前一天去照相馆印的,放在大信封里。烈士挺然的身躯、凛然的神情,一直在我眼前。她身后坐着日本兵,日本兵在这之前曾集体强奸了她,在这之后还要用乱刀捅死她。他们笑得脏、乱、差,就像今天众多的嘴脸。我嗓子里堵着一块实实在在的东西,我说不清这东西是悲伤还是愤怒。
“《色戒》是否美化汉奸”是这个节目的主题。几个所谓“嘉宾”和四周围坐的观众分成了针锋相对的两方,由表情夸张的主持人居间协调。我一般开会比较低调,不习惯跟人争辩。这一次火气很大,我事后都纳闷,怎么会粗暴地打断别人发言呢。那天气氛比较热烈,我说了不少话。不知道编导会剪多少,更不知人家会怎么剪。时隔好几天,记忆已开始模糊,趁着没全忘写下一些,对将来的播出的节目或许是个补充也说不定呢。
我那天最主要的一个观点是:要说李安的《色戒》,就必须说张爱玲的《色戒》,必须说张爱玲为什么要写《色戒》。张爱玲出身前清没落世家,已属破落户的飘零子弟。这种人急于出头而不大在乎手段。柯灵先生曾劝过她,说如今国难当头,你身在孤岛,千万别站错队;以你的文学天才,搁几年笔也不会被埋没的。但张爱玲“出名要趁早”, 悠悠万事唯此为大,全民抗战根本拦不住她做日伪统治下的文艺奇葩。不仅如此,他还跟当时的主管文化口的省部级干部胡兰成领了结婚证比翼双飞。这段人生经历放在今天的价值体系下,已经不算一回事了,但在抗战后乃至后来相当长的时间里,却构成不小的道德压力。张爱玲要给自己汉奸家属兼汉奸文人的身份寻解脱,找合理性。这应该是她写作《色戒》的主要动机。
如果张爱玲诚实一点,她完全可以立足于自己的真实经历,把一个没落自私渴望荣华的文学青年迈向汉奸文人汉奸太太的这一步交代清楚,这只是一小步,分析清楚、描绘生动一点都不困难。但这解决不了张爱玲要解决的问题。所以她没有写自己,而是抓来抗日烈士郑萍如的真实故事(其实张还是把自己、也就是一个典型张式小市民搁进去了,弄得人物极不合理),编了一段烈士爱上汉奸的小说。如果烈士都能爱上汉奸,张胡他们为日本人做事又算什么呢。只是这一步不是一小步,是大跃进,要跨过构成人、制约人的众多社会因素,其难度近乎柯受良飞跃黄河天堑。这道天堑,张爱玲唧唧歪歪没能飞过去。至于李安排《色戒》的动机,大概可以到他的国民党、“台湾人”、白人社会中的华裔这些尴尬身份里面去找吧,但我没那功夫。不过用他自己的话,张爱玲冥冥中在找他,也就求他帮忙再给飞一遍。张爱玲飞不过去李安就能飞过去么?李安当然飞也不过去,他只好拿出普天下电影人的混办法,让男女主角光着搂着滚过去。其实滚也是滚不过去的,但他让男女滚过去再滚过来,不停地滚,一直把部分观众滚晕,他就算过去了。
把一个抗日青年变为汉奸情妇,李安的老师是日本的毛片导演。日本毛片里男流氓强奸妇女,妇女先是推三阻四,叫骂不绝,到后来变叫骂为叫床,欲仙欲死。人到欲仙欲死连亲妈都想不起来,别说是非忠奸了。强奸犯肯定是希望被奸妇女不报警光叫床,侵略者也肯定是希望被侵略者不抵抗光慰安。但这只是他们的一厢情愿,并不反映多少真实。当然,林子大了什么鸟都有,人畜交配的事也发生过,一些流氓女作家在作品里也尽情享受半人半马的强奸,但我怀疑她们不过是叶公好龙。所以说,用阳具攻克妇女,是对就广大良家妇女的侮辱。把这一条肮脏的逻辑塞入烈士郑萍如刺杀魔头不成、慷慨就义的真实事件,更是丧尽天良。
场上有些嘉宾观众一口咬定李安与政治无关,这部片子只讲艺术只讲爱情。对此我是这样看的:如今这个时代没什么大危机,大家抬头风花雪月,低头男欢女爱,这也可以理解。但我们拿自己当小宝贝儿没关系,别拿李安当小宝贝。李安说只有他来排这部片子,才可能在国内通过,这说明他十分清楚其题材和主旨的政治性。个人利益与民族利益之间的关系,难道不是最大的政治么?场上还有人认为张爱玲是张爱玲,李安是李安,两个《色戒》没有关系。我则说,区别是有一点,但本质上没有一点不同。人家本来是连着的,咱们别拆散人家。
忘了是场上的某嘉宾还是某观众用《色戒》获“国际大奖”来证明这是部好片子。主持人问我怎么看。我说张艺谋、陈凯歌那些破片子不也屡屡获奖么?世界资本主义体系我都否定,何况那些废铜烂铁呢。 最后还从《色戒》色情镜头该不该剪,讨论到了国内电影的分级制,并请来下半身女作家木子美登场。广院刘建平教授发表了一番该剪的议论,主持人让木子美点评,木子美用“道貌岸然”一言蔽之。木子美认为影片的那些场面画出了女人的世界。她说,女人真的跟男人很不一样。我说,女人跟男人固然不一样,女人跟女人也未必一样,很多女人包括在场的各位,跟木子美也不会太一样吧。至于电影分级制,我说了三点意见。首先,文艺作品从性的角度表现社会人生,这没有问题。如果必要,别说全裸了,就是把内窥镜用上也没关系。(木子美问我干吗那么仇视性,我说)我一点也不仇视性,甚至喜欢性。我只是纳闷,为什么这些文学家电影人低能到离开裤裆就混不下去,比比《士兵突击》真不知差哪儿去了。很多作品纯粹靠性撑着,就跟车展上的有些破汽车似的,不站一个三点女郎,根本就无人驻足。其次,我不反对分级制,但我怀疑它的实际效果。因为第一,这年头你不让青少年看他也有地方看,别低估了如今的孩子们。第二,也别高估了如今成年人的抵抗力。最后,除了实际效果,也还要考虑象征意义。社会是一个有机联动的体系,色情电影跟妓院毒品之类的道德前提差不多是同一个,你放了这个,放不放那个?这件事还涉及到现行统治的意识形态合法性,这就是政治精英考虑的事情了。
结束时我再次拿出照片,讲了自己的感言:我们今天能花红柳绿地坐在这里言心言性,是靠了郑萍如等无数烈士的舍生忘死。我们要知道好歹。该反对的要敢于反对。没有恨的爱是虚伪的爱。这位死难烈士,大家可以不必记住她的名字,但希望大家记住她的眼睛。 8月28日 Re: [purewind] 10+1+5游戏Q1:如何在心情低落的时候恢复积极呢?
答:唱歌、打球
Q2:你心目中的理想伴侣是什么样的? 答:理想主义、聪明、细腻、善良、美
Q3:相比两年前,自己有什么变化?
答:我不知道。
Q4:你目前面对的最大的难题是什么?
答:想做未做的事情太多、睡觉总是睡不够、笔记本速度太慢
Q5:最想实现的愿望是什么?
答:变成理想的自己
Q6: 你有没有过厌恶自己的时候?为了什么?
答:有,性格弱点
Q7:你希望怎样的过这辈子?
答:请参考新概念4罗素的文章
Q8:最近/曾经喜欢看的书是啥,漫画也行。
答:最近不看书,只看各种源代码:现在相信代码比文档更有价值,好的代码不言自明,烂的文档(大部分都是)越看越晕
Q9:最近很喜欢听的一首歌是什么?
答:Notre Dame de Paris
Q10:你相信,真爱,是会回来的么?
答:好马不吃回头草,是你的就是你的,当然还需要用心呵护爱情。
Q11:怎样才算是真爱?(小丸的问题~她没有删除问题~呵呵……)
答:以前有个自称飞龙的男人说过一句话(此人还说过无数句垃圾话……):“关于爱情,我惟一懂得的是,我不懂爱情。”
还有个忘记名字的人说过:“适合一个人的伴侣也许有千千万万个,运气好的这辈子也许能遇上不止一个,但是我们只会有一个爱人,
一个真正愿意与我们一起分享爱情里的喜悦和悲伤,相互支持走完一生的人:这个人,也许就是我们的真爱。”
Q5/7:哪些人常看你的博客?朋友中有哪些人不常看?为什么? 答:没有人看我的吧,因为从来不更新后记:出这套题的人估计是最近在为感情郁闷的小朋友。。。 |
|
|||
|
|