正在加载...
分页: 122/186 第一页 上页 117 118 119 120 121 122 123 124 125 126 下页 最后页 [ 显示模式: 摘要 | 列表 ]
点击在新窗口中浏览此图片

●《新牛津英汉双解大词典》New Oxford English-Chinese Dictionary
收录单词、短语及释义355000余条,近百位专家学者历时六年倾心打造,是目前全球最大的英汉双解词典。英语教师、英语研究人员、翻译工作者及其他中等以上水平的英语学习者案头必备的权威工具书。

●《新牛津美语大词典》New Oxford American Dictionary  
地道实用的美语英英词典,收录英语词目25000余条,其中2000余条为近年来的新词。语言信息详尽、通俗易懂,能帮助使用者扩大词汇量,提高口笔语能力。

●《牛津英语习语词典》Oxford Idioms Dictionary
本词典是一本高质量、实用的英语习语词典,收录英美常用习语10000余条,注重习语的实际应用技巧,提供诸多有趣的背景知识;有效掌握习语知识。  

●《牛津英语搭配词典》Oxford Collocations Dictionary

●《牛津英语同义词词典》Oxford Study Thesaurus

●《牛津短语动词词典》Oxford Phrasal Verbs Dictionary

150余本实用词典辞书

●《简明英汉词典》(升级版)
收词102万,其中单纯词和连写及半连写复合词近20万。兼顾语文词汇及百科词汇,同时收录8000条新词新义,常用单词含D.J.和K.K.两种音标,执行国家语言文字使用规范。
《简明汉英词典》 《现代英汉综合大辞典》 《现代汉英综合大辞典》
《现代汉语全功能词典》 《中华成语全功能词典》 《国际标准汉字大字典》
《爱词霸网络百科》 《详解日本外来语辞典》 《实用中韩词典》  
《实用韩中词典》 《韩英汉经济贸易词典》 《七国语言大词典》中、日、英、韩、俄、德、法
《新法汉常用词词典》 《英汉双解计机算词典》 《英中医学辞海》等  

98个专业学科
计算机 · 金融 · 法律 · 医学 · 中医 · 药学 · 体育 · 旅游 · 物理学 · 数学 · 自动化 · 机械工程
测绘学 · 电子学 · 化学 · 学工程 · 心理学 · 生理学 · 动物学 · 古生物学 · 遗传学 · 细胞生物学
昆虫学 · 植物学 · 微生物学 · 人体解剖学 · 天文学 · 胚胎学 · 力学 · 生物化学 · 生物物理学 · 海洋科学
地理学 · 人体组织学 · 地球物理学 · 地质学 · 航海科技 · 林学 · 建筑园林 · 城市规划 · 煤炭科技
农学 · 水利科技 · 土壤学 · 船舶工程 · 冶金学 · 铁道科技 · 电力 · 石油 · 电工 · 大气 · 公路科技
航空 · 航天 · 通信科技 · 土木工程 · 自然辩证 · 摄影 · 电影 · 电视 · 烹饪 · 社会 · 音乐等

海量学习资料
《薄冰大学英语语法》 ·  《商务英语口语》 · 圣经 · 体育术语 · 体育名人 · 英语名言谚语 · 英语笑话
唐诗精选 · 宋词精选 · 度量衡表 · 美国州名 · 英语学习网址 · 常用英文名 · 中外机构名 ·
中外节日 · 货币单位 · 元素符号 · 不规则动词表 · 缩略语表 · 数词总表 · 拼音检字表 ·
部首检字表等



金山词霸 http://cp.iciba.com/

破解使用说明:
下载好后安装,安装好后把破解文件拷贝到安装目录里,覆盖原有的3个文件安装的时候如果提示要激活,请选择“试用”
下载地址 [sfile][/sfile]

Ping命令的C源代码

[ 2008/11/12 18:15 | by selboo ]

#pragma pack(4)
#define WIN32_LEAN_AND_MEAN
#include
#include
#include
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)
/* The IP header */
typedef struct iphdr {
unsigned int h_len:4; // length of the header
unsigned int version:4; // Version of IP
unsigned char tos; // Type of service
unsigned short total_len; // total length of the packet
unsigned short ident; // unique identifier
unsigned short frag_and_flags; // flags
unsigned char ttl;
unsigned char proto; // protocol (TCP, UDP etc)
unsigned short checksum; // IP checksum
unsigned int sourceIP;
unsigned int destIP;
}IpHeader;
//
// ICMP header
//
typedef struct _ihdr {
BYTE i_type;
BYTE i_code; /* type sub code */
USHORT i_cksum;
USHORT i_id;
USHORT i_seq;
/* This is not the std header, but we reserve space for time */
ULONG timestamp;
}IcmpHeader;
#define STATUS_FAILED 0xFFFF
#define DEF_PACKET_SIZE 32
#define MAX_PACKET 1024
#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))
#define xfree(p) HeapFree (GetProcessHeap(),0,(p))
void fill_icmp_data(char *, int);
USHORT checksum(USHORT *, int);
void decode_resp(char *,int ,struct sockaddr_in *);
void Usage(char *progname){
fprintf(stderr,"Usage:\n");
fprintf(stderr,"%s [data_size]\n",progname);
fprintf(stderr,"datasize can be up to 1Kb\n");
ExitProcess(STATUS_FAILED);
}
int main(int argc, char **argv){
WSADATA wsaData;
SOCKET sockRaw;
struct sockaddr_in dest,from;
struct hostent * hp;
int bread,datasize;
int fromlen = sizeof(from);
int timeout = 1000;
char *dest_ip;
char *icmp_data;
char *recvbuf;
unsigned int addr=0;
USHORT seq_no = 0;
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
fprintf(stderr,"WSAStartup failed: %d\n",GetLastError());
ExitProcess(STATUS_FAILED);
}
if (argc <2 ) {
Usage(argv[0]);
}
sockRaw = WSASocket (AF_INET,
SOCK_RAW,
IPPROTO_ICMP,
NULL, 0,0);
if (sockRaw == INVALID_SOCKET) {
fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set recv timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
timeout = 1000;
bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set send timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
memset(&dest,0,sizeof(dest));
hp = gethostbyname(argv[1]);
if (!hp){
addr = inet_addr(argv[1]);
}
if ((!hp) && (addr == INADDR_NONE) ) {
fprintf(stderr,"Unable to resolve %s\n",argv[1]);
ExitProcess(STATUS_FAILED);
}
if (hp != NULL)
memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length);
else
dest.sin_addr.s_addr = addr;
if (hp)
dest.sin_family = hp->h_addrtype;
else
dest.sin_family = AF_INET;
dest_ip = inet_ntoa(dest.sin_addr);
if (argc >2) {
datasize = atoi(argv[2]);
if (datasize == 0)
datasize = DEF_PACKET_SIZE;
}
else
datasize = DEF_PACKET_SIZE;
datasize += sizeof(IcmpHeader);
icmp_data = xmalloc(MAX_PACKET);
recvbuf = xmalloc(MAX_PACKET);
if (!icmp_data) {
fprintf(stderr,"HeapAlloc failed %d\n",GetLastError());
ExitProcess(STATUS_FAILED);
}
memset(icmp_data,0,MAX_PACKET);
fill_icmp_data(icmp_data,datasize);
while(1) {
int bwrote;
((IcmpHeader*)icmp_data)->i_cksum = 0;
((IcmpHeader*)icmp_data)->timestamp = GetTickCount();
((IcmpHeader*)icmp_data)->i_seq = seq_no++;
((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,
datasize);
bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,
sizeof(dest));
if (bwrote == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("timed out\n");
continue;
}
fprintf(stderr,"sendto failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
if (bwrote < datasize ) {
fprintf(stdout,"Wrote %d bytes\n",bwrote);
}
bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,
&fromlen);
if (bread == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("timed out\n");
continue;
}
fprintf(stderr,"recvfrom failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
decode_resp(recvbuf,bread,&from);
Sleep(1000);
}
return 0;
}
/*
The response is an IP packet. We must decode the IP header to locate
the ICMP data
*/
void decode_resp(char *buf, int bytes,struct sockaddr_in *from) {
IpHeader *iphdr;
IcmpHeader *icmphdr;
unsigned short iphdrlen;
iphdr = (IpHeader *)buf;
iphdrlen = iphdr->h_len * 4 ; // number of 32-bit words *4 = bytes
if (bytes < iphdrlen + ICMP_MIN) {
printf("Too few bytes from %s\n",inet_ntoa(from->sin_addr));
}
icmphdr = (IcmpHeader*)(buf + iphdrlen);
if (icmphdr->i_type != ICMP_ECHOREPLY) {
fprintf(stderr,"non-echo type %d recvd\n",icmphdr->i_type);
return;
}
if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) {
fprintf(stderr,"someone else's packet!\n");
return ;
}
printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr));
printf(" icmp_seq = %d. ",icmphdr->i_seq);
printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp);
printf("\n");
}
USHORT checksum(USHORT *buffer, int 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);
}
/*
Helper function to fill in various stuff in our ICMP request.
*/
void fill_icmp_data(char * icmp_data, int datasize){
IcmpHeader *icmp_hdr;
char *datapart;
icmp_hdr = (IcmpHeader*)icmp_data;
icmp_hdr->i_type = ICMP_ECHO;
icmp_hdr->i_code = 0;
icmp_hdr->i_id = (USHORT)GetCurrentProcessId();
icmp_hdr->i_cksum = 0;
icmp_hdr->i_seq = 0;
datapart = icmp_data + sizeof(IcmpHeader);
//
// Place some junk in the buffer.
//
memset(datapart,'E', datasize - sizeof(IcmpHeader));
}
Tags: , ,

linux rpm命令

[ 2008/11/12 18:11 | by selboo ]

查询RPM格式的软件包,可使用如下命令格式:

rpm -q [查询选项1 查询选项2...]

也可使用--query代替-q,效果一样的。

如下是相关的参数说明:

点击在新窗口中浏览此图片

定制自己CentOS 5安装光盘

[ 2008/11/12 18:04 | by selboo ]
      目前CentOS 5.2的安装CD有1至6张,但是在安装系统过程中,并不是所有的程序都是你想安装的,而且需要准备1-6张CD来安装一个Linux系统,实在是太麻烦了,其实安装一个实用的Linux 系统,不需要那么臃肿的,我们可以度身定制一个合适你自己的CentOS Linux系统.

我的目标是打算将1-6CD中的软件包集合到一张CD中,只需要一张CD就可以自动安装一个实用的Linux.

准备:
1. 在VM上安装一个最少化的Linux系统之后,再根据实际情况安装需要的软件包:
# yum install -y pump-devel gtk2-devel booty bogl-devel bogl-bterm elfutils-devel beecrypt-devel dietlibc anaconda anaconda-runtime busybox-anaconda

2. 下载一个CentOS 5.2的DVD iso.
# mount -o loop /storage/CentOS-5.2-i386-bin-DVD.iso /media

3. 建立相关的目录环境:
# mkdir -p /storage/kickstart_build/isolinux/CentOS
# mkdir -p /storage/kickstart_build/isolinux/ks
# mkdir -p /storage/kickstart_build/isolinux/image
# mkdir -p /storage/kickstart_build/isolinux/repodata
# mkdir /storage/kickstart_build/all_rpms

4. 复制源CD中的文件:
# cp -rp /media/isolinux/* /storage/kickstart_build/isolinux
   包括.discinfo
# cp /media/.discinfo /storage/kickstart_build/isolinux
# cp -rp /media/isolinux/repodata/comps.xml /storage/kickstart_build
# cp -rp /media/CenOS/* /storage/kickstart_build/all_rpms

5.编辑ks.cfg:
#vi /storage/kickstart_build/isolinux/ks/ks.cfg

# Kickstart file automatically generated by anaconda.

install
cdrom
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
network --device eth1 --onboot no --bootproto dhcp
rootpw --iscrypted $1$AEQtgISA$pJKkCI5GeO3MLmLz/Fz.00
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=sda
#part /boot --fstype ext3 --size=100 --ondisk=sda
#part pv.2 --size=0 --grow --ondisk=sda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=256 --grow --maxsize=512
clearpart --all --initlabel
part /boot --fstype ext3 --size=100
part swap --size=1024
part / --fstype ext3 --size=100 --grow

%packages
@editors
@text-internet
@dialup
@core
@base
device-mapper-multipath


6. 对RPMS进行剪裁,例如你可以将你需要安装的RPM包全部复制到/storage/kickstart_build/isolinux/CentOS目录下,请参考附件list文件,是我需要安装的软件包列表. 你可以编辑comps.xml 文件中的packages列表来决定你需要安装的软件包.

7.收集依赖性软件包
请使用shell1,使用方法: 下载到/storage/kickstart_build目录下,修改为pare.pl,并赋予可执行权限:

# cd /storage/kickstart_build
# chmod +x pare.pl
# cd /storage/kickstart_build/isolinux/CentOS
# /storage/kickstart_build/pare.pl /storage/kickstart_build/all_rpms i386

8.测试软件包的依赖性
# cd /storage/kickstart_build/isolinux/CentOS
# mkdir /tmp/testdb
# rpm --initdb --dbpath /tmp/testdb
# rpm --test --dbpath /tmp/testdb -Uvh *.rpm

按照提示,缺少哪些依赖性软件包,直接从/storage/kickstart_build/all_rpms 下复制过来就行了.

9.创建repository
# cd /storage/kickstart_build/isolinux
# declare -x discinfo=`head -1 .discinfo`
# createrepo -u "media://$discinfo" -g /storage/kickstart_build/comps.xml .

命令运行完毕之后,会自动建立repodata目录.

10.建立ISO文件

# cd /storage/kickstart_build
# mkisofs -o MYOS.iso -b isolinux.bin -c boot.cat -no-emul-boot \
   -boot-load-size 4 -boot-info-table -R -J -v -T isolinux/

生成MD5字符串:
# /usr/lib/anaconda-runtime/implantisomd5 custom.iso
Tags: , ,

路由基础解析

[ 2008/11/11 17:37 | by selboo ]
VLSM(可变长子网掩码)

在CIDR以前,每个主类网络号只可以分配给一个组织使用,这个组织可以利用子网化技术使得一个主类网络划分为多个子网,但是所有子网必须是一致的掩码,也就是说只能分一次子网,即FLSM。

VLSM是FLAM的增强版,是“子网的子网化”,使得同一网络号可以有不同的子网掩码,而这也就决定了VLSM只能在无类网络环境中使用,当然这不是迫于无奈的选择,而是技术进步的必然。

但是VLSM只是提高了分配地址块的使用效率,却没能解决地址分配的低效,很多组织呗分配到了多个C类地址,而不是一个单独的B类地址。

CIDR(无类别域间路由)

CIDR应运而生,CIDR是以“位”为单位决定IP地址的网路位和主机位,不再受原来的八位组限制,那么从后向前归位,CIDR能够聚合汇总路由信息,从而缩小路由表大小,减小开销,这对BGP来讲是很Help的。

从前向后的借位,CIDR使得子网不再只有本地意义,分配更为灵活,比如,131.108.0.0/16可以分成131.108.0.0/18 ~ 131.108.192.0/18四块地址,独立的分配给四个组织,而不是传统的一个组织一个主类地址再子网化了。

路由表查找顺序

1.从IP数据包中提取目的IP地址。

2.先用直连网段去挨个匹配,即用每个直连路由条目的子网掩码和目的网络进行And运算,再与该条目的网络前缀进行匹配。

3.如果没有直连匹配的项,查看是否有目的地址的主机路由存在。

4.如果没有主机路由,则匹配路由表中的其他条目,逐条进行匹配。

5.如果依然没有匹配的项,就看是否有默认路由,有的话通过默认路由发出去,如果连默认路由都没有,丢弃该数据包,返回ICMP信息指明该目的网络不可达。

命令 ip  classless 对路由表查找有影响,如果关闭了(默认是开启的),那么就不会用精确掩码去和目的地址去匹配(比如我写10.1.1.0 255.255.255.0),而是用这个该网络的主网络位去匹配,即255.0.0.0,这样只要有别的子网在,就不会通过默认路由转发数据。

另外一个命令 ip subnet-zero 在路由器中是默认启用的,以支持全0的子网,比如172.16.0.0/24,如果关闭的话,在给接口配置地址的时候像 ip address 172.16.0.1 255.255.255.0 这样就是非法的了。

超网 vs 聚合

关于“聚合”和“超网”,大家都说这两个是一个概念,我觉得还是有些区别的。

“聚合”的概念等同于路由汇总,目的是为了减小路由负载,汇总的网络不必连续,但网络前缀必须在数字上相似,确保用唯一的网络前缀向其它网络广播,且这些网络在地域上足够相近,从而能从同一个ISP连接到Internet,举例来讲,将192.168.64.0/24和192.168.65.0/24汇总成192.168.64.0/23通告出去。

“超网”的概念先于CIDR 15个月提出,概念是将数个相邻的网络地址合并成一个单独的更大的网络,目的在于省去在这些网络间路由的麻烦,规则是这些网络地址数字上必须相邻,且必须连在同一个接口上,如果不是的话,这些网络间的流量就会通过Router来路由,超网也就没有意义了,举例来讲,从192.24.0.0/24到192.31.255.0/24有2^11个C类网络,可以用192.24.0.0/13来表示。
      
简单来说,超网是将小网络合成大网络,针对网络本身,聚合是对现有网络形成的路由条目进行汇总,针对的是路由表。

PS 3: 还有个小技巧,比如192.168.1.129/27 和 192.168.1.65/27一看就不在同一网段,129-65=64,/27掩码每个子网主机数为2^(32-27) = 32, 64>32,所以肯定不在同一子网。

策略路由

策略路由的优先级高于路由表,即使路由表中没有相对应的路由条目,单纯在策略路由也能转发正常数据包。具体是用route-map来实现,步骤如下:

1)定义好对象  即在写route-map的时候需要match的东东,比较常见的是地址,用ACL来定义,注意标准ACL只能针对源来做策略,而扩展ACL可以针对源,目的网络或者具体的上层应用。

(config)# access-list 1 permit 1.1.1.0 0.0.0.255
(config)# access-list 101 permit tcp 1.1.5.0 0.0.0.255 any eq telnet

PS:在我们做实验验证时,可以通过ip telnet source-interface loop 0 来改变自己telnet时的源地址为Loopbak 0

2)写route-map,下面是一个具体例子,基本的组成元素就是match和set,即针对什么东东以及执行的动作是什么。

(config)# route-map to-r1         // 定义一个route-map,名字要可读性强
(config-route-map)# match ip add 1     // 这里的1就是指的access-list 1
(config-route-map)# match length 0 200    // 针对的源地址以及数据包大小,二者需同时匹配
(config-route-map)# set ip next-hop 23.1.1.3   //定义好要策略的具体动作,这里是改变下一跳

这里最后的一条set命令可以有两种选择:

set ip next-hop 23.1.1.3 (对端IP)  

set default interface fa0/0 (本地出口)

不过这两条命令是有区别的,前者直接应用策略路由,而后者先检查路由表,如果没有明细路由对应再用策略路由。

需要注意的是,如果default interface为以太口,由于我们并未告知路由器下一跳的IP地址,路由器也就没有办法通过ARP解析出Mac,会出现封装失败的情况,不过在转发失败之后会进行ARP请求。

这样的命令可能会让我们联想到静态路由,不过区别在于静态路由如果指定以太口为本地出口,比如 ip route 0.0.0.0  0.0.0.0 fa0/0,通过show arp 可以看到这条命令在敲下去以后会添加相应的ARP表项,也就是会发起ARP请求。

3)应用在接口,这里没有in 和out 的概念,因为肯定是该接口收到这个数据包后进行匹配然后按策略路由转发。

(config-if)# ip policy route-map to-r1
分页: 122/186 第一页 上页 117 118 119 120 121 122 123 124 125 126 下页 最后页 [ 显示模式: 摘要 | 列表 ]