最热门文章

常用标签

云输入法 好的站点 数据之美 数据库优化 网站优化 网页安全 跨浏览器 输入法 重构 页面优化 Android CSS css优化 facebook firebug HTML html重构 html5 HTTP协议 http历史 ie javascript Last Modified lighttpd linux linux后台开发 MYSQL mysql优化 netstat ping QQ QQ云输入法 QQWeb输入法 web web开发 Web服务器 web服务器配置 web设计 WEB颜色 xhtml

Posts Tagged ‘linux’

linux下环境变量的操作命令

export,set,env都可以用来设置环境变量,多少又有一些不同的地方: export [-fn] [-p] [name[=value]] 这个是对所有进程有效的,所以一般也是会在系统启动后就执行。写在/etc/profile里面 set [--abBCefhHkmnpPtuvx] [-o option] [argument ...] 这个是进程或者是shell当前有效的,进程或者shell退出后变量就不起作用了。 env [OPTION]... [NAME=VALUE]... [COMMAND [ARGS]...] env同set,不过一般主要用来显示环境变量,如env | grep "***" 对于bash shell 关于环境变量命令介绍: 1.echo 显示某个环境变量值 echo $PATH 2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号) 3.env 显示所有环境变量 4.set 显示本地定义的shell变量 5.unset 清除环境变量 unset HELLO 6.readonly 设置只读环境变量 readonly HELLO 用C程序来访问和设置环境变量 对于C程序的用户来说,可以使用下列三个函数来设置或访问一个环境变量。 ◆ getenv()访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访问的环境变量不存在,则会返回NULL。 ◆ setenv()在程序里面设置某个环境变量的函数。 ◆ unsetenv()清除某个特定的环境变量的函数。 参考:http://webtools.live2support.com/linux/ http://ss64.com/bash/set.html 什么是环境变量 环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。许多用户(特别是那些刚接触Linux的新手)发现这些变量有些怪异或者难以控制。其实,这是个误会:通过使用环境变量,你可以很容易的修改一个牵涉到一个或多个应用程序的配置信息。 一般不太熟悉的两个环境变量: PS1是基本提示符,对于root用户是#,对于普通用户是$。PS2是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt  ”。 # PS1=" Hello,Welcome  " Hello,Welcome 下表罗列了一些Linux系统使用的变量并说明了它们的用处。在表格后面将列举一些变量例值。 变量 说明 PATH 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge)不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls,所以在shell脚本里会显示来指定这个变量,从而避免一些命令找不到的情况)。 ROOTPATH 这个变量的功能和PATH相同,但它只罗列出超级用户(root)键入命令时所需检查的目录。 LDPATH 这个变量包含了一系列用冒号隔开的目录,动态链接器将在这些目录里查找库文件。 MANPATH 这个变量包含了一系列用冒号隔开的目录,命令man会在这些目录里搜索man页面。 INFODIR 这个变量包含了一系列用冒号隔开的目录,命令info将在这些目录里搜索info页面。 PAGER 这个变量包含了浏览文件内容的程序的路径(例如less或者more)。 EDITOR 这个变量包含了修改文件内容的程序(文件编辑器)的路径(比如nano或者vi)。 KDEDIRS 这个变量包含了一系列用冒号隔开的目录,里面放的是KDE相关的资料。 CONFIG_PROTECT 这个变量包含了一系列用空格隔开的目录,它们在更新的时候会被Portage保护起来。 CONFIG_PROTECT_MASK 这个变量包含了一系列用空格隔开的目录,它们在更新的时候不会被Portage保护起来。

Posted in linux后台
Tags: ,

epoll事件模型简单示例

epoll基于事件的网络模型中,常常会提到边缘触发(edge-triggered readiness notification)和条件触发(level-triggered readiness notification)。 边缘触发的含义是:在应用程序传给内核一个文件描述符(FD)后(一个SOCKET链接可以看做是一个FD),只有当该FD从not ready切换到ready状态(有字节可读)时,内核会通知这个状态变化,而不会通知是否已经读完,也就是后面需要由应用程序持续进行读取,直到读到EWOULDBLOCK为止,否则这个SOCKET的状态就一直保持在ready上,应用程序没有持续读到EWOULDBLOCK,出现了交互的僵死,双方都不明对方的状态。边缘触发读通知,也有称作为准备状态改变通知(readiness change notification)。 条件触发的含义是:和边缘触发不同,条件触发的含义是“there is unread data in the buffer”,只要在SOCKET上还有未读完的数据,就会给出条件触发通知,通知应用程序有数据可读。 从上面可以看出所以在程序中条件触发编写起来要简单的多,尤其是在tcp这种流式协议中,一旦缓冲区了有了数据就会触发响应的事件,然后应用程序就去读取数据来进行处理。对于边缘触发而言,每次触发事件后去取数据的时候需要一次性取完里面的所有数据,否则下次有数据来的话,就不会再触发事件了,相对而言,需要应用程序来维护一个读取的缓冲区,相对也就复杂一些,不过,由于每次都把数据读取完了,事件触发的就会相对少一些,在性能和并发方面会较有优势一些。 epoll的操作十分简单,一共就4个API:epoll_create, epoll_ctl, epoll_wait和close。具体的几个函数的说明参考: epoll_create() creates an epoll "instance", requesting the kernel to allocate an event backing store dimensioned for size descriptors. The size is ...

Posted in linux后台
Tags: ,

【转】理解Linux的性能

项目中常遇到需要对目前运行的系统进行效率分析,或碰到客户咨询如何优化系统的效率问题。更多的情况是,在系统出现问题的时候,需要分析原因,定位系统 故障或瓶颈,当然,最好是可以一并解决故障。但实际上,操作系统优化是一个非常复杂的问题,况且linux有自己一套有别于其他操作系统管理的机制,由此 会引起很多不必要的误解和麻烦。自问我是写不错条理性的文章了,只能转一份高人写的文档供参考。(文章根据实际进行了一定的裁减,并对容易碰到的问题做了标识) 一、前提 我们可以在文章的开始就列出一个列表,列出可能影响Linux操作系统性能的一些调优参数,但这样做其实并没有什么价值。因为性能调优是一个非常困难的 任务,它要求对硬件、操作系统、和应用都有着相当深入的了解。如果性能调优非常简单的话,那些我们要列出的调优参数早就写入硬件的微码或者操作系统中了, 我们就没有必要再继续读这篇文章了。正如下图所示,服务器的性能受到很多因素的影响。 当面对一个使用单独IDE硬盘的,有20000用户的数据库服务器时,即使我们使用数周时间去调整I/O子系统也是徒劳无功的,通常一个新的驱动或者应用程序的一个更新(如SQL优化)却可以使这个服务器的性能得到明显的提升。正如我们前面提到的,不要忘记系统的性能是受多方面因素影响的。 理解操作系统管理系统资源的方法将帮助我们在面对问题时更好的判断应该对哪个子系统进行调整。 二、Linux的CPU调度 任何计算机的基本功能都十分简单,那就是计算。为了实现计算的功能就必须有一个方法去管理计算资源、处理器和计算任务(也被叫做线程或者进程)。非常感 谢Ingo Molnar,他为Linux内核带来了O(1)CPU调度器,区别于旧有的O(n)调度器,新的调度器是动态的,可以支持负载均衡,并以恒定的速度进行 操作。 新调度器的可扩展性非常好,无论进程数量或者处理器数量,并且调度器本身的系统开销更少。新调取器的算法使用两个优先级队列。 ·活动运行队列 ·过期运行队列 调度器的一个重要目标是根据优先级权限有效地为进程分配CPU 时间片,当分配完成后它被列在CPU的运行队列中,除了 CPU 的运行队列之外,还有一个过期运行队列。当活动运行队列中的一个任务用光自己的时间片之后,它就被移动到过期运行队列中。在移动过程中,会对其时间片重新 进行计算。如果活动运行队列中已经没有某个给定优先级的任务了,那么指向活动运行队列和过期运行队列的指针就会交换,这样就可以让过期优先级列表变成活动 优先级的列表。通常交互式进程(相对与实时进程而言)都有一个较高的优先级,它占有更长的时间片,比低优先级的进程获得更多的计算时间,但通过调度器自身 的调整并不会使低优先级的进程完全被饿死。新调度器的优势是显著的改变Linux内核的可扩展性,使新内核可以更好的处理一些有大量进程、大量处理器组成的企业级应用。 新的O(1)调度器包含仔2.6内核中,但是也向下兼容2.4内核。 新调度器另外一个重要的优势是体现在对NUMA(non-uniform memory architecture)和SMP(symmetric multithreading processors)的支持上,例如INTEL@的超线程技术。 改进的NUMA支持保证了负载均衡不会发生在CECs或者NUMA节点之间,除非发生一个节点的超出负载限度。 三、Linux的内存架构 今天我们面对选择32位操作系统还是64位操作系统的情况。对企业级用户它们之间最大的区别是64位操作系统可以支持大于4GB的内存寻址。从性能角度来讲,我们需要了解32位和64位操作系统都是如何进行物理内存和虚拟内存的映射的。 在上面图示中我们可以看到64位和32位Linux内核在寻址上有着显著的不同。 在32位架构中,比如IA-32,Linux内核可以直接寻址的范围只有物理内存的第一个GB(如果去掉保留部分还剩下896MB),访问内存必须被映 射到这小于1GB的所谓ZONE_NORMAL空间中,这个操作是由应用程序完成的。但是分配在ZONE_HIGHMEM中的内存页将导致性能的降低。 在另一方面,64位架构比如x86-64(也称作EM64T或者AMD64)。ZONE_NORMAL空间将扩展到64GB或者128GB(实际上可以 更多,但是这个数值受到操作系统本身支持内存容量的限制)。正如我们看到的,使用64位操作系统我们排除了因ZONE_HIGHMEM部分内存对性能的影 响的情况。 实际中,在32位架构下,由于上面所描述的内存寻址问题,对于大内存,高负载应用,会导致死机或严重缓慢等问题。虽然使用hugemen核心可缓解,但采取x86_64架构是最佳的解决办法。 四、虚拟内存管理 因为操作系统将内存都映射为虚拟内存,所以操作系统的物理内存结构对用户和应用来说通常都是不可见的。如果想要理解Linux系统内存的调优,我们必须 了解Linux的虚拟内存机制。应用程序并不分配物理内存,而是向Linux内核请求一部分映射为虚拟内存的内存空间。如下图所示虚拟内存并不一定是映射 物理内存中的空间,如果应用程序有一个大容量的请求,也可能会被映射到在磁盘子系统中的swap空间中。 另外要提到的是,通常应用程序不直接将数据写到磁盘子系统中,而是写入缓存和缓冲区中。Bdflush守护进程将定时将缓存或者缓冲区中的数据写到硬盘上。 Linux内核处理数据写入磁盘子系统和管理磁盘缓存是紧密联系在一起的。相对于其他的操作系统都是在内存中分配指定的一部分作为磁盘缓存,Linux处理内存更加有效,默认情况下虚拟内存管理器分配所有可用内存空间作为磁盘缓存,这就是为什么有时我们观察一个配置有数G内存的Linux系统可用内存只有20MB的原因。 同时Linux使用swap空间的机制也是相当高效率的,如上图所示虚拟内存空间是由物理内存和磁盘子系统中的swap空间共同组成的。如果虚拟内存管 理器发现一个已经分配完成的内存分页已经长时间没有被调用,它将把这部分内存分页移到swap空间中。经常我们会发现一些守护进程,比如getty,会随 系统启动但是却很少会被应用到。这时为了释放昂贵的主内存资源,系统会将这部分内存分页移动到swap空间中。上述就是Linux使用swap空间的机制,当swap分区使用超过50%时,并不意味着物理内存的使用已经达到瓶颈了,swap空间只是Linux内核更好的使用系统资源的一种方法。 简单理解:Swap usage只表示了Linux管理内存的有效性。对识别内存瓶颈来说,Swap In/Out才是一个比较又意义的依据,如果Swap In/Out的值长期保持在每秒200到300个页面通常就表示系统可能存在内存的瓶颈。下面的事例是好的状态: # vmstat procs -----------memory-------------     ---swap--   -----io----   --system--    ----cpu---- r  b   ...

Posted in linux后台
Tags: ,

linux下gdb常用的调试命令

用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法。 呵呵,有时迷茫了自己处在什么堆栈的深处,这是使用where命令能够清晰的看到自己的位置,有时在循环太多让人受不了了,可使用u或者finish或者jump命令来跳出去。 gdb常用: run  启动程序运行 next 单步执行(不到函数内部) step  单步执行,跟踪到函数内部 finish 继续执行,直到当前函数结束 continue 继续执行,直到下一个断点 jump 9 直接跳到指定行 list  显示源码 l 3,10 显示特定范围的源码 l main显示函数的源码 set listsize 50 修改源码显示行数 break 设置断点 b main设置函数断点 b 9 设置指定行断点 b 将下一行设置为断点 b test if a == 10 设置条件断点 delete 删除断点 d 3 删除指定的断点 condition 修改条件 condition 4 a == 90 info 查看信息 info threads 查看线程信息 info breakpoints 查看断点信息 info locals 显示局部变量 info args    显示函数变量 info registers 显示寄存器数据 thread 2 切换线程 where 查看调用堆栈(bt ...

Posted in linux后台
Tags: ,

shell脚本备忘录

好久没有写过shell的脚本了,今天突然要写一个,竟然忘记的差不多啦。备忘一下常用的一些东东吧: 1 关于头部声明:#!/bin/sh 2 关于PATH变量:PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/usr/local/mysql/bin:/opt/www/htdig/bin:/usr/share/texmf/bin",常常一些expect脚本。php脚本执行不了,就是因为path没有搞对,导致找不到响应的一些程序的位置 3 变量赋值:(注意使用变量时的单双引号的却别,echo ‘$STR’ 和echo "$STR" 输出是不一样的) STR="Hello World" echo $STR 4 加减乘除的运算:(let 或者 expr 命令(expr命令很强大,man一下就知道其可以进行字符串的操作)) x=1 echo $x let "x = $x + 1" echo $x x=`expr $x + 1`(注意这时反引号) 5 条件语句:(if then else elif/还有case呢) if [ $a = $b ] then echo yes else echo no fi 或者: if [ $a = $b ]; then echo yes else echo no fi 字符串或者数字都有如下一些比较,都是比较语义化的: 对应操作    整数操作    字符串操作 相同           -eq                = 不同     ...

Posted in linux后台
Tags: , ,

Android第一次

最近因为要了解一点手机开发的东东,于是接触了一下Android。没有用过相关gphone,看过相关的手机,没想到手机的发展超过我的想象。只怪我太落后于时代了。大学时代所谓的3G已经这么普及了。 Android是基于linux的一个手机操作系统,在linux操作系统的基础上提供了不少的核心的中间件。对于开发者而言,Android提供了一个基于google java library的java开发接口。呵呵,如果使用纯c来开发也不是不可。Android上的java虚拟机也照样可以按照本地码来的形式来加载这些纯c的代码。看来Android的一个核心是一个java的虚拟机Dalvik。 Dalvik--看看wiki上怎么解释的。Dalvik虚拟机的官网。 Dalvik is the virtual machine on Android mobile devices. It runs applications which have been converted into a compact Dalvik Executable (.dex) format suitable for systems that are constrained in terms of memory andprocessor speed. Dalvik was written by Dan Bornstein, who named it after the fishing village of Dalvík in Eyjafjörður, Iceland, where some of his ancestors lived. Dalvik不同于平时常用的机遇stack的java虚拟机,是一个基于register的虚拟机。(呵呵,有兴趣的话,可以搜搜基于stack的虚拟机和基于register的虚拟机的区别) Android上使用的java库不是传统的j2se或者j2me上的awt或者swing,而是采用了开源的Apache ...


fastcgi一次请求的性能分析

ltrace是个好东西,利用ltrace来分析一下一次fastcgi请求过程中进行的函数的调用。 ps -ef找到fastcgi进程的pid。ltrace -p上去,通过-c来查看统计信息 ltrace -c -p 12585 % time     seconds  usecs/call     calls      function ------ ----------- ----------- --------- -------------------- 9.91    0.005776          29       199 free 8.08    0.004711          29       158 snprintf 7.68    0.004480       ...


calloc以及malloc

#include <stdlib.h> void *calloc(size_t nmemb, size_t size); void *malloc(size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size); 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别: malloc()函数有一个参数,即要分配的内存空间的大小 void*malloc(size_tsize); calloc ()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void* calloc(size_tnumElements,size_tsizeOfElement); 如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。 不过最主要的区别是calloc成功后,会对分配的内存进行一次初始化为0的操作。 不过如此的话,性能上有一点一点的损失。 执行malloc,callco以及bzero 1000次后的时间使用情况: malloc test Time cost => 64(us), avg => 0(us) calloc test Time cost => 72(us), avg => 0(us) bzero test Time cost => 48(us), avg => 0(us) 对于进行linux下开发的同学来说,建议使用calloc避免每次malloc后都要去bzero的操作。


linux下errno全注释

在linux下写后台程序的时候,为了了解一些系统调用函数的出错信息,我们使用全局的errno来标识 但是对于errno你知道多少呢。 124 EMEDIUMTYPE   Wrong medium type 123 ENOMEDIUM     No medium found 122 EDQUOT        Disk quota exceeded 121 EREMOTEIO     Remote I/O error 120 EISNAM        Is a named type file 119 ENAVAIL       No XENIX semaphores available 118 ENOTNAM       Not a XENIX named type file 117 EUCLEAN       Structure needs cleaning 116 ESTALE        Stale NFS file handle 115 EINPROGRESS  +Operation now in progress 114 EALREADY      Operation already in progress 113 EHOSTUNREACH  No route to host 112 EHOSTDOWN     Host is down 111 ECONNREFUSED  Connection refused 110 ETIMEDOUT    +Connection timed out 109 ETOOMANYREFS  Too many references: cannot splice 108 ESHUTDOWN     Cannot send after transport endpoint shutdown 107 ENOTCONN      Transport endpoint is not connected 106 EISCONN       Transport endpoint is already connected 105 ENOBUFS       No buffer space available 104 ECONNRESET    Connection reset by peer 103 ECONNABORTED  Software caused connection abort 102 ENETRESET     Network dropped connection on reset 101 ENETUNREACH   Network is unreachable 100 ENETDOWN      Network is down 99 EADDRNOTAVAIL Cannot assign requested address 98 EADDRINUSE    Address already in use 97 EAFNOSUPPORT  Address family not supported by protocol 96 EPFNOSUPPORT  Protocol family not supported 95 EOPNOTSUPP    Operation not supported 94 ESOCKTNOSUPPORT Socket type not supported 93 EPROTONOSUPPORT Protocol not supported 92 ENOPROTOOPT   Protocol not available 91 EPROTOTYPE    Protocol wrong type for socket 90 EMSGSIZE     +Message too long 89 EDESTADDRREQ  Destination address required 88 ENOTSOCK      Socket operation on non-socket 87 EUSERS        Too many users 86 ESTRPIPE      Streams pipe error 85 ERESTART      Interrupted system call should be restarted 84 EILSEQ        Invalid or incomplete multibyte or wide character 83 ELIBEXEC      Cannot exec a shared library directly 82 ELIBMAX       Attempting to link in too many shared libraries 81 ELIBSCN       .lib section in a.out corrupted 80 ELIBBAD       Accessing a corrupted shared library 79 ELIBACC       Can not access a needed shared library 78 EREMCHG       Remote address changed 77 EBADFD        File descriptor in bad state 76 ENOTUNIQ      Name not unique on network 75 EOVERFLOW     Value too large for defined data type 74 EBADMSG      +Bad message 73 EDOTDOT       RFS specific error 72 EMULTIHOP     Multihop attempted 71 EPROTO        Protocol error 70 ECOMM         Communication error on send 69 ESRMNT        Srmount error 68 EADV          Advertise error 67 ENOLINK       Link has been severed 66 EREMOTE       Object is remote 65 ENOPKG        Package not installed 64 ENONET        Machine is not on the network 63 ENOSR         Out of streams resources 62 ETIME         Timer expired 61 ENODATA       No data available 60 ENOSTR        Device not a stream 59 EBFONT        Bad font file format 57 EBADSLT       Invalid slot 56 EBADRQC       Invalid request code 55 ENOANO        No anode 54 EXFULL        Exchange full 53 EBADR         Invalid request descriptor 52 EBADE         Invalid exchange 51 EL2HLT        Level 2 halted 50 ENOCSI        No CSI structure available 49 EUNATCH       Protocol driver not attached 48 ELNRNG        Link number out of range 47 EL3RST        Level 3 reset 46 EL3HLT        Level 3 halted 45 EL2NSYNC      Level 2 not synchronized 44 ECHRNG        Channel number out of range 43 EIDRM         Identifier removed 42 ENOMSG        No message of desired type 40 ELOOP         Too many levels of symbolic links 39 ENOTEMPTY    +Directory not empty 38 ENOSYS       +Function not implemented 37 ENOLCK       +No locks available 36 ENAMETOOLONG +File name too long 35 EDEADLK      +Resource deadlock avoided 34 ERANGE       +Numerical result out of range 33 EDOM         +Numerical argument out of domain 32 EPIPE        +Broken pipe 31 EMLINK       +Too many links 30 EROFS        +Read-only file system 29 ESPIPE       +Illegal seek 28 ENOSPC       +No space left on device 27 EFBIG        +File too large 26 ETXTBSY       Text file busy 25 ENOTTY       +Inappropriate ioctl for device 24 EMFILE       +Too many open files 23 ENFILE       +Too many open files in system 22 EINVAL       +Invalid argument 21 EISDIR       +Is a directory 20 ENOTDIR      +Not a directory 19 ENODEV       +No such device 18 EXDEV        +Invalid cross-device link 17 EEXIST       +File exists 16 EBUSY        +Device or resource busy 15 ENOTBLK       Block device required 14 EFAULT       +Bad address 13 EACCES       +Permission denied 12 ENOMEM       +Cannot allocate memory 11 EAGAIN       +Resource temporarily unavailable 10 ECHILD       +No child processes 9 EBADF        +Bad file descriptor 8 ENOEXEC      +Exec format error 7 E2BIG        +Argument list too long 6 ENXIO        +No such device or address 5 EIO          +Input/output error 4 EINTR        +Interrupted system call 3 ESRCH        +No such process 2 ENOENT       +No such file or directory 1 EPERM        +Operation not permitted #    0 --            Success 这么多errno的说明,调试程序就方便啦!


常用的网络命令如ping、netstat等使用说明

最近因为网络问题导致一些服务器不可用,闹腾了好几天,整理了一下网络诊断中产用的几个网络命令,便于后续自己遇到问题时能够比较方便的判断和跟进! 一 ping 它是用来检查网络是否通畅或者网络连接速度的命令。ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。 基本上,ping 从您的服务器向目标服务器发送 Internet 控制消息协议(Internet Control Message Protocol,ICMP)数据包,然后接收来自目标服务器的响应。如果收到响应,那么您能够连接到目标服务器。使用 ping 是确定是否存在问题、数据在服务器之间的传输速度,以及您是否能够连接目标的简单而快速的方法。 下面就来看看它的一些常用的操作。先看看帮助吧,在DOS窗口中键入:ping /? 回车,。所示的帮助画面。在此,我们只掌握一些基本的很有用的参数就可以了(下同)。 1  -t 表示将不间断向目标IP发送数据包,直到我们强迫其停止。试想,如果你使用100M的宽带接入,而目标IP是56K的小猫,那么要不了多久,目标IP就因为承受不了这么多的数据而掉线,呵呵,一次攻击就这么简单的实现了。 2 -l 定义发送数据包的大小,默认为32字节,我们利用它可以最大定义到65500字节。结合上面介绍的-t参数一起使用,会有更好的效果哦。 3 -n 定义向目标IP发送数据包的次数,默认为3次。如果网络速度比较慢,3次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧。 说明一下,如果-t 参数和 -n参数一起使用,ping命令就以放在后面的参数为标准,比如"ping IP -t -n 3",虽然使用了-t参数,但并不是一直ping下去,而是只ping 3次。另外,ping命令不一定非得ping IP,也可以直接ping主机域名,这样就可以得到主机的IP。 下面我们举个例子来说明一下具体用法。 这里time=2表示从发出数据包到接受到返回数据包所用的时间是2秒,从这里可以判断网络连接速度的大小。从TTL的返回值可以初步判断被ping主机的操作系统,之所以说"初步判断"是因为这个值是可以修改的。这里TTL=32表示操作系统可能是 win98。这里time值越小越好啦,说明你连接对方的服务器就越快。 (小知识:如果TTL=128,则表示目标主机可能是Win2000;如果TTL=250,则目标主机可能是Unix) 至于利用ping命令可以快速查找局域网故障,可以快速搜索最快的QQ服务器,可以对别人进行ping攻击……这些就靠大家自己发挥了。 但有些时候,ping 不能作为确认能够连接到服务器的唯一工具,因为服务器可能通过防火墙阻止了 ICMP 请求。以下示例显示 ICMP 被阻止并模拟无法连接到 IBM.com 的 IP 地址 129.42.18.103 的情况: ping 129.42.18.103 PING 129.42.18.103: (129.42.18.103): 56 data bytes ^C ----129.42.18.103 PING Statistics---- 6 packets transmitted, 0 packets ...