Linux网络协议分析工具tcpdump和tshark用法

Linux网络协议分析工具tcpdump和tshark用法 Tcpdump是网络协议分析的基本工具。tshark是大名鼎鼎的开源网络协议分析工具wireshark (原名叫ethereal) 的命令行版本,wireshark可对多达千余种网络协议进行解码分析。Wireshark 和 tcpdump 均使用libpcap 库 (参见 libpcap 编程教程) 进行网络截包。 TCPDUMP 详细manpage参见tcpdump网站。 基本用法 Tcpdump的参数基本分为两块:选项 (options) 和过滤器表达式 (filter_expression) 。 # tcpdump [options] [filter_expression] 例如 # tcpdump -c 100 -i eth0 -w log tcp dst port 50000 其中 options部分参数: -c 100 指定截取的包的数量 -i eth0 指定监听哪个网络端口 -w log 输出到名为log的文件中 (libpcap格式) filter_expression参数为 tcp dst port 50000,即只监听目标端口为50000的tcp包。 更多的例子: /* 监视目标地址为除内网地址(192.168.3.1-192.168.3.254)之外的流量 */ tcpdump dst net not 192.168.3.0/24 /* 监视除HTTP浏览 (端口80/8080) 、SSH(22)、 POP3 (110)之外的流量,注意在括号(之前添加转义符, -n和-nn的解释见随后 */ ...

2012-06-25 · 3 min · 566 words · -

su, sudo

su, sudo sudo 免密码 # change visudo editor sudo update-alternatives --config editor sudo visudo # 或 sudo vim /etc/sudoers.d/00_wiloon wiloon ALL=(ALL) NOPASSWD: ALL 注意: 有的时候你的将用户设了 nopasswd, 但是不起作用,原因是被后面的 group 的设置覆盖了,需要把 group 的设置也改为 nopasswd joe ALL=(ALL) NOPASSWD: ALL %admin ALL=(ALL) NOPASSWD: ALL https://www.cnblogs.com/itech/archive/2009/08/07/1541017.html https://askubuntu.com/questions/70534/what-are-the-differences-between-su-sudo-s-sudo-i-sudo-su sudo 提供密码 echo 'password' | sudo -S command #!/bin/bash sudo -S apt-get update << EOF 你的密码 EOF -S 参数的作用 使用 man 命令查询 sudo,对参数 -S 的说明如下: Write the prompt to the standard error and read the password from the standard input instead of using the terminal device. The password must be followed by a newline character. ...

2012-06-23 · 3 min · 583 words · -

adb, no permission

adb, no permission http://www.blogjava.net/brian/articles/316019.html 在ubuntu(9.10)下执行adb devices命令, 返回的结果是: List of devices attached ???????????? no permissions 这意味着,USB连接的设备是能够被识别的。Google之后,得知adb server需要以root的权限启动,于是有了如下命令: brian@brian-laptop:~/Dev/Java/Android/android-sdk-linux_86/tools$ ./adb kill-server brian@brian-laptop:~/Dev/Java/Android/android-sdk-linux_86/tools$ sudo ./adb start-server * daemon not running. starting it now * * daemon started successfully * 第一条命令用来杀死当前正在运行的server, 第二条命令则以root的权限启动了新的server. 我们可以再次查看devices: brian@brian-laptop:~/Dev/Java/Android/android-sdk-linux_86/tools$ ./adb devices List of devices attached HT848KV04386 device 这次设备就被正确识别了。自然地, 像ddms之类的工具也能派上用场了。 如果你的机器不能识别,或不是Ubuntu环境,请参考官方文档:http://developer.android.com/guide/developing/device.html。 insufficient permissions for device If you’re developing on Ubuntu Linux, you need to add a rules file that contains a USB configuration for each type of device you want to use for development. Each device manufacturer uses a different vendor ID. The example rules files below show how to add an entry for a single vendor ID (the HTC vendor ID). In order to support more devices, you will need additional lines of the same format that provide a different value for the SYSFS{idVendor} property. For other IDs, see the table of USB Vendor IDs, below. ...

2012-06-23 · 1 min · 180 words · -

android adb

android adb macos install adb brew install --cask android-platform-tools http://blog.sina.com.cn/s/blog_51335a000101j59n.html 启动adb服务, 该服务用来为模拟器或通过 USB 数据线连接的真机服务, 需要以 root 权限启动, 否则 adb devices 会提示 no permissions. adb kill-server adb start-server 列出已连接的android设备 adb devices 安装apk adb install xxx/xxx.apk adb shell 在SDK的Tools文件夹下包含着Android模拟器操作的重要命令ADB,ADB的全称为Android Debug Bridge,就是调试桥的作用,借助这个工具,我们可以管理设备或手机模拟器的状态 ,还可以进行以下的操作: (1) 快速更新设备或手机模拟器中的代码,如应用或Android系统升级; (2) 在设备上运行Shell命令; (3) 管理设备或手机模拟器上的预定端口; (4) 在设备或手机模拟器上复制或粘贴文件。 ADB的工作方式比较特殊采用监听Socket TCP 5554等端口的方式让IDE和Qemu通信,默认情况下ADB会daemon相关的网络端口,所以当我们运行Eclipse时ADB进程就会自动运行,在Eclipse中通过DDMS来调试Android程序;也可以通过手动方式调用,以下为一些常用的操作供参考。 1.版本信息 D:\unsetup\android-sdk-windows-1.0_r1\tools>adb version Android Debug Bridge version 1.0.20 2.安装应用到模拟器 adb install [-l] [-r] <file> 其中file是需要安装的apk文件的决定路径。 3.卸载已经安装的应用 (1) 方法1: ...

2012-06-23 · 4 min · 680 words · -

echo, printf

echo, printf echo aaa > test.txt echo bbb » test.txt 参数 -n 不输出结尾的换行 -e:打开反斜杠字符 backslash-escaped 的解析,即对 /n,/t 等字符进行解析,而不视之为两个字符 -E:关闭反斜杠字符的解析,/n 作为两个字符,这是系统缺省模式 反斜杠字符 /a : 发出警告铃音(ALERT or CTRL-G (bell)) /b : 退格(BACKSPACE or CTRL-H ) /c : 删除最后的字符及最后的换行(Omit final NEWLINE ) /e : 删除后面的一个字符(Escape character (same as /E) ) /E : 同上(Escape character) /f : 换页符,在某些现实中会清屏,有些会换行(FORMFEED or CTRL-L ) /n : 换行(NEWLINE (not at end of command) or CTRL-J ) /r : 从行头开始,和换行不一样,仍在本行(RETURN (ENTER) or CTRL-M ) /t : tab键(TAB or CTRL-I ) /v : 竖直tab,和/f一样,显示不同机器有所不一样,通常会引起换行VERTICAL TAB or CTRL-K /n : 在cygwin中使用/65,无法正确显示'A’但是下面两种方法否可以显示。ASCII character with octal (base-8) value n, where n is 1 to 3 digits /0nnn : 用8进制的值表示一个字符,例如/0101,即65,表示字符’A’(The eight-bit character whose value is the octal (base-8) value nnn where nnn is 1 to 3 digits ) /xHH : 用16进制的值表示一个字符,例如/x41,即65,表示字符’A’The eight-bit character whose value is the hexadecimal (base-16) value HH (one or two digits) linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法 ...

2012-06-21 · 2 min · 221 words · -

cat command

cat command Red Hat Linux 有一个工具程序,它能够帮助你保留简短列表,将这些列表收集起来,甚至向你透漏一点你的系统信息。下面就是Linux Cat命令及使用详解 Red Hat Linux 有一个工具程序,它能够帮助你保留简短列表,将这些列表收集起来,甚至向你透漏一点你的系统信息。下面就是Linux Cat命令及主要功能。 Linux Cat命令主要有三大功能: 1.Linux Cat命令一次显示整个文件。$ cat filename 2.Linux Cat命令从键盘创建一个文件。$ cat > filename 只能创建新文件,不能编辑已有文件. 3.Linux Cat命令将几个文件合并为一个文件。 cat file1 file2 > file_out 参数: -n 或 -number 由 1 开始对所有输出的行数编号 -b 或 -number-nonblank 和 -n 相似,只不过对于空白行不编号 -s 或 -squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 -show-nonprinting 范例: cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 cat -b textfile1 textfile2 » textfile3 把 textfile1 和 textfile2 的档案内容加上行号 (空白行不加) 之后将内容附加到 textfile3 里。 范例: 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 cat -n textfile1 > textfile2 把 textfile1 和 textfile2 的档案内容加上行号 (空白行不加) 之后将内容附加到 textfile3 里。 cat -b textfile1 textfile2 » textfile3 cat /dev/null > /etc/test.txt 此为清空/etc/test.txt档案内容 cat 也可以用来制作 image file。例如要制作软碟的 image file,将软碟放好后打 cat /dev/fd0 > OUTFILE 相反的,如果想把 image file 写到软碟,请打 cat IMG_FILE > /dev/fd0 注: ...

2012-06-21 · 2 min · 241 words · -

hashtable, 哈希表, Hash表

hashtable, 哈希表, Hash表 Hash 表也称散列表,也有直接译作哈希表,Hash 表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于 Hash 表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。 1.Hash 表的设计思想 对于一般的线性表,比如链表,如果要存储联系人信息: 张三 13980593357 李四 15828662334 王五 13409821234 张帅 13890583472 那么可能会设计一个结构体包含姓名,手机号码这些信息,然后把4个联系人的信息存到一张链表中。当要查找”李四 15828662334“这条记录是否在这张链表中或者想要得到李四的手机号码时,可能会从链表的头结点开始遍历,依次将每个结点中的姓名同”李四“进行比较,直到查找成功或者失败为止,这种做法的时间复杂度为O(n)。即使采用二叉排序树进行存储,也最多为O(logn)。假设能够通过”李四“这个信息直接获取到该记录在表中的存储位置,就能省掉中间关键字比较的这个环节,复杂度直接降到O(1)。Hash表就能够达到这样的效果。 Hash表采用一个映射函数 f : key —> address 将关键字映射到该记录在表中的存储位置,从而在想要查找该记录时,可以直接根据关键字和映射关系计算出该记录在表中的存储位置,通常情况下,这种映射关系称作为Hash函数,而通过Hash函数和关键字计算出来的存储位置(注意这里的存储位置只是表中的存储位置,并不是实际的物理地址)称作为Hash地址。比如上述例子中,假如联系人信息采用Hash表存储,则当想要找到“李四”的信息时,直接根据“李四”和Hash函数计算出Hash地址即可。下面讨论一下Hash表设计中的几个关键问题。 因此有人会说,可以直接根据hashcode值判断两个对象是否相等吗?肯定是不可以的,因为不同的对象可能会生成相同的hashcode值。虽然不能根据hashcode值判断两个对象是否相等,但是可以直接根据hashcode值判断两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。如果要判断两个对象是否真正相等,必须通过equals方法。 也就是说对于两个对象,如果调用equals方法得到的结果为true,则两个对象的hashcode值必定相等; 如果equals方法得到的结果为false,则两个对象的hashcode值不一定不同; 如果两个对象的hashcode值不等,则equals方法得到的结果必定为false; 如果两个对象的hashcode值相等,则equals方法得到的结果未知。 哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除 (有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者一一人来说,这是一瞬间的事。哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表 (例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要O(N)的时间级。哈希表不仅速度快,编程实现也相对容易。 哈希表也有一些缺点它是基于数组的,数组创建后难于扩展某些哈希表被基本填满时,性能下降得非常严重,所以程序虽必须要清楚表中将要存储多少数据 (或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程)。 而且,也没有一种简便的方法可以以任何一种顺序〔例如从小到大〕遍历表中数据项。如果需要这种能力,就只能选择其他数据结构。 然而如果不需要有序遍历数据,并且可以提前预测数据量的大小。那么哈希表在速度和易用性方面是无与伦比的。 ⚖️ 哈希算法对比 算法 速度 安全性 抗冲突 主要用途 优点 缺点 SipHash-2-4 很快 高 好 哈希表,Python字符串hash 快速、安全、防攻击 需要密钥 MD5 中等 低 差 文件校验(已不推荐) 广泛支持 易被攻击、冲突多 SHA-1 慢 中等 中等 Git(正在淘汰) 曾经的标准 已被破解、速度慢 SHA-256 慢 很高 很好 密码学、区块链 非常安全 速度慢、不适合哈希表 djb2 很快 低 一般 简单哈希表 极快、简单 不安全、易被攻击 ...

2012-06-15 · 1 min · 92 words · -

linux AIO

linux AIO glibc 的 aio 有 bug , kernel 的 aio 只能以 O_DIRECT 方式做直接 IO , libeio 也是 beta 阶段。epoll 是成熟的,但是 epoll 本身是同步的。Linux 上目前没有像 IOCP 这样的成熟异步 IO 实现。 作者:cholerae 链接:https://www.zhihu.com/question/26943558/answer/125159376 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在高性能的服务器编程中,IO 模型理所当然的是重中之重,需要谨慎选型的,对于网络套接字,我们可以采用epoll 的方式来轮询,尽管epoll也有一些缺陷,但总体来说还是很高效的,尤其来大量套接字的场景下;但对于Regular File 来说,是不能够用采用 poll/epoll 的,即O_NOBLOCK 方式对于传统文件句柄是无效的,也就是说我们的 open ,read, mkdir 之类的Regular File操作必定会导致阻塞.在多线程、多进程模型中,可以选择以同步阻塞的方式来进行IO操作,任务调度由操作系统来保证公平性,但在单进程/线程模型中,以nodejs 为例 ,假如 我们需要在一个用户请求中处理10个文件: function fun() { fs.readFileSync(); fs.readFileSync(); … } 这时候进程至少会阻塞10次,而这可能会导致其他的上千个用户请求得不到处理,这当然是不能接受的. Linux AIO 早就被提上议程,目前比较知名的有 Glibc 的 AIO 与 Kernel Native AIO Glibc AIO: http://www.ibm.com/developerworks/linux/library/l-async/ Kernel Native AIO: http://lse.sourceforge.net/io/aio.html 在Glibc AIO 的实现中, 用多线程同步来模拟 异步IO ,以上述代码为例,它牵涉了3个线程, 主线程(23908)新建 一个线程(23909)来调用 阻塞的pread函数,当pread返回时,又创建了一个线程(23910)来执行我们预设的异步回调函数, 23909 等待23910结束返回,然后23909也结束执行.. ...

2012-06-12 · 2 min · 285 words · -

/dev/zero 和 /dev/null

/dev/zero 和 /dev/null /dev/null 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据 (但报告写入操作成功) ,读取它则会立即得到一个EOF[1]。 在程序员行话,尤其是Unix行话中,/dev/null被称为bit bucket[2]或者黑洞。使用空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。 /dev/null是一个特殊_文件_,而不是目录,因此不能使用Unix命令mv 将文件移动到其中。使用rm命令才是Unix中删除文件的正确方法。 本概念大致相当于CP/M,DOS和Microsoft Windows中的NUL:或单纯的NUL设备,Windows NT及其后续系统中的DeviceNull或NUL,Amiga中的NIL:,以及OpenVMS中的NL:。在基于.NET的Windows PowerShell中,相同的概念为$null。 /dev/zero /dev/zero,是一个输入设备,你可你用它来初始化文件。 /dev/zero–该设备无穷尽地提供0(是ASCII 0 就是NULL),可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入NULL。 使用/dev/zero 像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流 (二进制的零流,而不是ASCII型的) . 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件. 关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device) 或"安全地" 删除一个文件 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/null–它是空设备,也称为位桶 (bit bucket) 。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 使用/dev/null 把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用. 禁止标准输出. cat $filename >/dev/null -文件内容丢失,而不会输出到标准输出. 禁止标准错误 rm $badname 2>/dev/null -这样错误信息[标准错误]就被丢到太平洋去了. 禁止标准输出和标准错误的输出. 1 cat $filename 2>/dev/null >/dev/null -如果"$filename"不存在,将不会有任何错误信息提示. 如果"$filename"存在, 文件的内容不会打印到标准输出. -因此Therefore, 上面的代码根本不会输出任何信息. -当只想测试命令的退出码而不想有任何输出时非常有用。 Deleting contents of a file, but preserving the file itself, with all attendant permissions : cat /dev/null > /var/log/messages -> /var/log/messages 有同样的效果, 但不会产生新的进程. cat /dev/null > /var/log/wtmp - 自动清空日志文件的内容 (适合处理由Web站点发送的讨厌的"cookies")

2012-06-08 · 1 min · 102 words · -

ICEAuthority

ICEAuthority http://serverfault.com/questions/119580/what-is-iceauthority-file-in-opensuse-11-2 Here is a good paper on what ICE is, and what it does. Basically ICE is a inter process communication protocol, with authentication, protocol negotiation and potentially multiplexing built in. It allows two X clients to talk directly to each other, for example, a video player program could potentially talk to a jukebox program to update each other. As Richard Holloway says, the .ICEAuthority file is for authentication. It contains a number of random cookies. If two programs have the same cookie, then they’re allowed to talk to each other. In practice this either means that they’re reading the same .ICEAuthority file, or the cookies have been added. ...

2012-06-06 · 1 min · 141 words · -

getconf

getconf, 查看系统变量 我们时常需要查询系统相关的信息,比如页面大小,整数大小之类,如果编写程序去计算会比较繁琐,这里有一个很有用的命令,可以用来获取系统相关信息。它就是 getconf。 getconf 用途将系统配置变量值写入标准输出,比如: getconf PAGE_SIZE 查看系统内存分页大小 getconf LONG_BIT 看linux是32位还是64位最简单的方法 getconf -a 查看全部系统变量 getconf INT_MAX 2147483647 getconf LONG_BIT 64 可以取得的相关信息如下(参考相关资料,在又在版本上会有些不同): _CS_PATH Value for the PATH environment variable used to find commands. ARG_MAX Maximum length, in bytes, of the arguments for one of the exec subroutines, including environment data. ARG_MAX 值 不能改, 要修改只能重新编译内核 BC_BASE_MAX Maximum value allowed for the obase variable with the bc command. BC_DIM_MAX Maximum number of elements permitted in an array by the bc command. BC_SCALE_MAX Maximum value allowed for the scale variable with the bc command. BC_STRING_MAX Maximum length of a string constant accepted by the bc command. CHARCLASS_NAME_MAX Maximum number of bytes in a character class name. CHAR_BIT Number of bits in a type character. CHAR_MAX Maximum value of a type character. CHAR_MIN Minimum value of a type character. CHILD_MAX Maximum number of simultaneous processes for each real user ID. CLK_TCK Number of clock ticks per second returned by the time subroutine. COLL_WEIGHTS_MAX Maximum number of weights that can be assigned to an entry in the LC_COLLATE locale stanza in a locale-definition file. CS_PATH Value of the PATH environment variable used to find commands. EXPR_NEST_MAX Maximum number of expressions that can be nested within parentheses by the expr command. INT_MAX Maximum value of a type int. INT_MIN Minimum value of a type int. LINE_MAX Maximum length, in bytes, of a command's input line (either standard input or another file) when the utility is described as processing text files. The length includes room for the trailing new-line character. LONG_BIT Number of bits in a type long int. LONG_MAX Maximum value of a type long int. LONG_MIN Minimum value of a type long int. MB_LEN_MAX Maximum number of bytes in a character for any supported locale. NGROUPS_MAX Maximum number of simultaneous supplementary group IDs for each process. NL_ARGMAX Maximum value of digit in calls to the printf and scanf subroutines. NL_LANGMAX Maximum number of bytes in a LANG name. NL_MSGMAX Maximum message number. NL_NMAX Maximum number of bytes in an N-to-1 collation mapping. NL_SETMAX Maximum set number. NL_TEXTMAX Maximum number of bytes in a message string. NZERO Default process priority. OPEN_MAX Maximum number of files that one process can have open at one time. PATH Sequence of colon-separated path prefixes used to find commands. RE_DUP_MAX Maximum number of repeated occurrences of a regular expression permitted when using the interval-notation parameters, such as the m and n parameters with the ed command. SCHAR_MAX Maximum value of a type signed char. SCHAR_MIN Minimum value of a type signed char. SHRT_MAX Maximum value of a type short. SHRT_MIN Minimum value of a type short. SSIZE_MAX Maximum value of an object of type ssize_t. STREAM_MAX Number of streams that one process can have open at one time. TMP_MAX Minimum number of unique path names generated by the tmpnam subroutine. Maximum number of times an application can reliably call the tmpnam subroutine. TZNAME_MAX Maximum number of bytes supported for the name of a time zone (not the length of the TZ environment variable). UCHAR_MAX Maximum value of a type unsigned char. UINT_MAX Maximum value of a type unsigned int. ULONG_MAX Maximum value of a type unsigned long int. USHRT_MAX Maximum value of a type unsigned short int. WORD_BIT Number of bits in a word or type int https://www.cnblogs.com/wjoyxt/p/4815782.html

2012-05-26 · 3 min · 547 words · -

FTP的主动模式和被动模式

FTP的主动模式和被动模式 http://space.itpub.net/14075938/viewspace-495630 FTP两种工作模式: 主动****模式(ActiveFTP) 和被动模式(PassiveFTP) 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口 (通常是20) 来连接客户端指定的端口N+1,进行数据传输。 在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。 总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。 被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。 win 下面设置ftp模式 一、什么是PASV和PORT方式 (1) PORT其实是Standard模式的另一个名字,又称为Active模式。中文意思是"主动模式。 (2) PASV也就是Passive的简写。中文就是"被动模式。 二、两者不同 不同之处是由于PORT (主动) 这个方式需要在接上TCP 21端口后,服务器通过自己的TCP 20来发出数据。并且需要建立一个新的连接来传送档案。而PORT的命令包含一些客户端没用的资料,所以有了PASv的出现。而PASV模式拥有PORT模式的优点,并去掉一些PORT的缺点。PASV运行方式就是当服务器接收到客户端连接请求时,就会自动从端口1024到5000中随机选择一个和客户端建立连接传递数据。由于被动且自动建立连接,容易受到攻击,所以安全性差。 三、常见的FTP客户端软件PORT方式与PASV方式的切换方法 大部分FTP客户端默认使用PASV方式。IE默认使用PORT方式。 在大部分FTP客户端的设置里,常见到的字眼都是"PASV"或"被动模式",极少见到"PORT"或"主动模式"等字眼。因为FTP的登录方式只有两种: PORT和PASV,取消PASV方式,就意味着使用PORT方式。 (1) IE: 工具 -> Internet选项 -> 高级 -> “使用被动FTP” (需要IE6.0以上才支持) 。 (2) CuteFTP: Edit -> Setting -> Connection -> Firewall -> “PASV Mode” 或File -> Site Manager,在左边选中站点 -> Edit -> “Use PASV mode” 。 (3) FlashGet: 工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式”。 ...

2012-05-26 · 2 min · 255 words · -

iptables防火墙与vsftpd的被动传输模式

iptables防火墙与vsftpd的被动传输模式 Linux服务器上开启了防火墙,并配置vsftpd,就出现了一些问题 可以连接,列出目录,但是无法下载/上传,经过检查,是受FTP传输模式影响导致。 iptables的配置策略往往就限制入站的目的端口,ftp服务器使用标准的21端口作为控制端口,但是数据的传输端口取决于传输模式 主动模式: 服务器以源端口20或随机端口向客户端的协商的随机端口发起链接,也就是说,这时两边防火墙的策略应该是: 服务器端应该允许目标端口为20的入站连接,允许所有随机端口的出站连接 当然,服务器是否以20为源端口连接,取决于/etc/vsftpd.conf是否设置 connect_from_port_20=YES 客户端应该允许所有源端口为20的入站连接,允许所有随机端口的出站连接 被动模式: 客户端以随机连接服务器的某个随机端口 (通过21端口协商得到) 如此, 如果客户端使用了NAT或是有防火墙,问题就变得复杂多了。 在主动模式下,服务器连接客户端 (即客户端NAT主机的公网IP) 随机端口,肯定会失败的,所以客户端使用NAT时,不能使用主动模式,同理,如果客户端使用防火墙,只允许指定的入站端口连接,那么也会失败。 如果使用被动模式呢?也有问题,因为客户端是连接服务器的随机端口(服务器只允许指定入站端口连接),也会出问题,那么对于vsftpd, 解决办法就是: 1.vsftpd 使用被动模式,并设定被动模式监听的端口范围 2.服务器防火墙允许到此范围端口的入站连接 对vsftpd的配置: pasv_enable=YES //使用被动模式,等待客户端连接 pasv_min_port=50000 //被动模式时监听的端口范围下限 pasv_max_port=50100//被动模式时监听的端口范围上限 对iptables的配置 -A RH-Firewall-1-INPUT -p tcp -m tcp -dport 50000:50100 -j ACCEPT 当然,客户端需要设置为被动方式连接 http://zhangxugg-163-com.iteye.com/blog/867422

2012-05-26 · 1 min · 42 words · -

debian VSFTPD

debian VSFTPD install vsftpd sudo apt-get install vsftpd 1. 匿名服务器的连接 (独立的服务器) 在/etc/vsftpd/vsftpd.conf配置文件中添加如下几项: Anonymous_enable=yes (允许匿名登陆) Dirmessage_enable=yes (切换目录时,显示目录下.message的内容) Local_umask=022 (FTP上本地的文件权限,默认是077) connect_from_port_20=YES 启用FTP数据端口的数据连接,http://www.wiloon.com/?p=3234 Xferlog_enable=yes (激活上传和下传的日志) Xferlog_std_format=yes (使用标准的日志格式) Ftpd_banner=XXXXX (欢迎信息) Pam_service_name=vsftpd (验证方式) * Listen=yes 这将告诉vsftpd工作于standalone模式。不要从inetd中运行该设定下的vsftpd,否则将不会工作,你将得到错误信息: could not bind listening socket. 功能: 只能连接FTP服务器,不能上传和下传 注: 其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于FTP的基本选项 2. 开启匿名FTP服务器上传权限 在配置文件中添加以下的信息即可: Anon_upload_enable=yes (开放上传权限) Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件) Write_enable=yes (开放本地用户写的权限) Anon_other_write_enable=yes (匿名帐号可以有删除的权限) 3. 开启匿名服务器下传的权限 在配置文件中添加如下信息即可: Anon_world_readable_only=no 注: 要注意文件夹的属性,匿名帐户是其它 (other) 用户要开启它的读写执行的权限 (R) 读–下传 (W) 写–上传 (X) 执行–如果不开FTP的目录都进不去 4.普通用户FTP服务器的连接 (独立服务器) 在配置文件中添加如下信息即可: Local_enble=yes (本地帐户能够登陆) Write_enable=no (本地帐户登陆后无权删除和修改文件) ...

2012-05-26 · 3 min · 460 words · -

sysv-rc-conf

sysv-rc-conf sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconfig好用。 Ubuntu运行级别 Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作。 Ubuntu 的系统运行级别: 0 系统停机状态 1 单用户或系统维护状态 2~5 多用户状态 6 重新启动 查看当前运行级别,执行命令: runlevel ( runlevel 显示上次的运行级别和当前的运行级别,"N"表示没有上次的运行级别。) 切换运行级别,执行命令: init [0123456Ss] ( 即在 init 命令后跟一个参数,此参数是要切换到的运行级的运行级代号,如: 用 init 0 命令关机;用 init 6 命令重新启动。) 三、Linux 系统主要启动步骤: 1. 读取 MBR 的信息,启动 Boot Manager Windows 使用 NTLDR 作为 Boot Manager,如果您的系统中安装多个 版本的 Windows,您就需要在 NTLDR 中选择您要进入的系统。 Linux 通常使用功能强大,配置灵活的 GRUB 作为 Boot Manager。 2. 加载系统内核,启动 init 进程 init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。 3. 进程读取 init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别, 按顺序运行该运行级别对应文件夹下的脚本。脚本通常以 start 参数启 动,并指向一个系统中的程序。 通常情况下, /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是 /etc/rcN.d/ 目录。例如您设定的运行级别为 3,那么它对应的启动 目录为 /etc/rc3.d/ 。 4. 根据对应脚本启动服务器 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg Xwindow 为 Linux 下的图形用户界面系统。 5. 启动登录管理器,等待用户登录 Ubuntu 系统默认使用 GDM 作为登录管理器,您在登录管理器界面中 输入用户名和密码后,便可以登录系统。(您可以在 /etc/rc3.d/ 文件夹中找到一个名为 S13gdm 的链接) 四、安装sysv-rc-conf sudo apt-get install sysv-rc-conf 五、使用sysv-rc-conf sudo sysv-rc-conf 操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。其中,"X"表示开启该服务。 六 、部分服务优化推荐及介绍 acpi-support 这个是关于电源支持的默认是1,2,3,4,5下启动,我认为你可以把它调整到s级别。 acpid acpi的守护程序,默认是2-5开启,我认为可以不用管。 alsa alsa声音子系统,应该不用开启它。 alsa-utils 这个服务似乎取代了alsa,所以开启这个就可以了,我在S级别开启它。 anacron 这是一个用于执行到时间没有执行的程序的服务,我认为它无所谓,所以关了它,这个可以随便。 apmd 也是一种电源管理,我认为电脑如果不是很老,它就没有开启的必要了。 atd 和anacron类似,我把它关了。 bluez-utiles 传说中的蓝牙服务,然后遗憾我没有,所以关了。 bootlogd 似乎使用来写log的,安全期间开着他也许比较好。 cron 指定时间运行程序的服务,所以开着比较好的。 cupsys 打印机服务,所以如果你有,就开启吧。 dbus 消息总线系统,非常重要,一定要开。 dns-clean 拨号连接用的,如果不用,就关了它。 evms 企业卷管理系统,由于我并不明白什么叫做企业卷,所以我关了它。 fetchmail 用于邮件守护,我关了它。 gdm gnome桌面管理器,我关了它,然后用startx启动gnome。 halt 关机用的,不要更改 hdparm 这个我刚才有讲,如果没有ide硬盘也就不用开启它了。 hotkey-setup 这个是给某些品牌笔记本设计的热键映射,台式机用户请关了它 hotplug 这个是用于热插拔的,我已经测试过了,在某些电脑上关闭它会使声卡无效,请在S级别开启它。 hplip hp打印机专用的,应该可以关了它。 ifrename 网络接口重命名,好像没用,关了。 ifupdown 这个使用来打开网络的,开着它。 ifupdown-clean 同上。 klogd linux守护程序,接受来自内核和发送信息到syslogd的记录,并记录为一个文件,所以请开着它。 linux-restricted-modules-common 这个使用来使用受限制的模块的,你可以从/lib/linux-restricted-modules下查看,如果没有什么,你可以关掉它。 lvm 逻辑卷管理器,如果你没有请关了它。 makedev 用来创建设备到/dev/请不要动他。 mdamd 管理raid用,如果你没有请关闭它。 module-init-tools 从/etc/modules 加在扩展模块的,这个一般开着。 networking 增加网络接口和配置dns用,将它开启。 ntp-server 与ubuntu时间服务器进行同步的,关了。 pcmcia 激活pcmica设备,遗憾我有生以来都没有见过这样的设备,关了它。 powernowd 用于管理cpu的客户端程序,如果有变频功能,比如amd的quite' cool 那么就开启它吧。 ppp 拨号用的,我关了它。 ppp-dns 一样,也关了。 readahead 预加载服务,让我想起了win的预读,当然他们不同,它会使启动变慢3-4妙,所以我关了它。 reboot 重启用的,不要动。 rmnologin 如果发现nologin,就去除它,在笔记本上不用开启。 rsync rsync协议守护,请视情况而定。 screen-cleanup 一个清除开机屏幕的脚本,随便。 sendsigs 重启和关机时向所有进程发送消息。所以不要管它。 single 激活但用户模式,不用管它。 stop-bootlogd 从2,3,4,5级别停止bootlogd,不用管它。 sudo 这个不用说吧,不用管它。 sysklogd 用于记录系统日志信息,不用管它。 udev 用户空间dev文件系统,不用管它。 udev-mab 同上。 umountfs 用来卸载文件卷的,不用管它。 urandom 生成随即数的,不知道怎么用,不用管它。 usplash 那个漂亮的启动画面,但是我关了它,它也存在,所以想关他需要把内核起动参数中的splash一句删掉。 vbesave 显卡bios配置工具,不用管它。 xorg-common 设置x服务ice socket。不用管它。 ...

2012-05-26 · 2 min · 230 words · -

ubuntu vsftpd

ubuntu vsftpd sudo apt-get install vsftpd 查看是否打开21端口 $ sudo netstat -npltu | grep 21 VSFTPD的菜鸟篇 作者: 龙磊 这是我这个菜鸟学习LINUX所写的第一篇文章,是比较基础的FTP架设的应用,如果我写有什么问题请大家多指教,我后续会陆续出进阶篇把FTP中各种详细的配置跟大家一起进行探讨。 我所用的是LINUX AS+VSFTPD-1.2.0-4的系统架构,在这里说明的是如果对配置文件不是很熟悉,最好做个备份,以免误操作: 1. 匿名服务器的连接 (独立的服务器) 在/etc/vsftpd.conf配置文件中添加如下几项: Anonymous_enable=yes (允许匿名登陆) Dirmessage_enable=yes (切换目录时,显示目录下.message的内容) Local_umask=022 (FTP上本地的文件权限,默认是077) Connect_form_port_20=yes (启用FTP数据端口的数据连接) * Xferlog_enable=yes (激活上传和下传的日志) Xferlog_std_format=yes (使用标准的日志格式) Ftpd_banner=XXXXX (欢迎信息) Pam_service_name=vsftpd (验证方式) * Listen=yes (独立的VSFTPD服务器) * 功能: 只能连接FTP服务器,不能上传和下传 注: 其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于FTP的基本选项 2. 开启匿名FTP服务器上传权限 在配置文件中添加以下的信息即可: Anon_upload_enable=yes (开放上传权限) Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件) Write_enable=yes (开放本地用户写的权限) Anon_other_write_enable=yes (匿名帐号可以有删除的权限) 3. 开启匿名服务器下传的权限 在配置文件中添加如下信息即可: Anon_world_readable_only=no 注: 要注意文件夹的属性,匿名帐户是其它 (other) 用户要开启它的读写执行的权限 (R) 读–下传 (W) 写–上传 (X) 执行–如果不开FTP的目录都进不去 ...

2012-05-25 · 3 min · 513 words · -

readelf

readelf 功能:用于查看ELF格式的文件信息,常见的文件如在 Linux 上的可执行文件,动态库(.so) 或者静态库 (.a) 等包含 ELF 格式的文件。 示例: 查看静态库定义的函数 readelf -c xxx.a 查看静态库定义的函数 readelf -A xxx.so 版权声明:本文为CSDN博主「mayue_csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mayue_web/article/details/103879976 ELF (Executable and Linkable Format) 即可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛。当你使用 file 命令发现某个文件是 ELF 文件时,你就可以使用 readelf 命令来读取这个文件的信息。 readelf -h /bin/pwd readelf 命令 用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档 (这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。 这个程序和 objdump 提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。 运行 readelf 的时候,除了 -v和 -H之外,其它的选项必须有一个被指定。 ELF文件类型 3种类型的ELF文件: 可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。 可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。 共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。 ELF文件作用: ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件: 如果用于编译和链接 (可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。 如果用于加载执行 (可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。 如果是共享文件,则两者都含有。 ELF文件总体组成: elf文件头描述elf文件的总体信息。包括:系统相关,类型相关,加载相关,链接相关。 系统相关表示:elf文件标识的魔术数,以及硬件和平台等相关信息,增加了elf文件的移植性,使交叉编译成为可能。 类型相关就是前面说的那个类型。 加载相关:包括程序头表相关信息。 链接相关:节头表相关信息。 选项 -a –all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. ...

2012-05-24 · 13 min · 2732 words · -

debian 修改无线网卡的信道

debian 修改无线网卡的信道 查看无线网卡支持的信道 sudo iwlist channel #这个是我的thinkpad x60s, !!!不支持channel 12,13,14, #最后面有列出当前信道Current Frequency=xxx lo no frequency information. eth0 no frequency information. wlan0 24 channels in total; available frequencies : Channel 01 : 2.412 GHz Channel 02 : 2.417 GHz Channel 03 : 2.422 GHz Channel 04 : 2.427 GHz Channel 05 : 2.432 GHz Channel 06 : 2.437 GHz Channel 07 : 2.442 GHz Channel 08 : 2.447 GHz Channel 09 : 2.452 GHz Channel 10 : 2.457 GHz Channel 11 : 2.462 GHz Channel 36 : 5.18 GHz Channel 40 : 5.2 GHz Channel 44 : 5.22 GHz Channel 48 : 5.24 GHz Channel 52 : 5.26 GHz Channel 56 : 5.28 GHz Channel 60 : 5.3 GHz Channel 64 : 5.32 GHz Channel 149 : 5.745 GHz Channel 153 : 5.765 GHz Channel 157 : 5.785 GHz Channel 161 : 5.805 GHz Channel 165 : 5.825 GHz Current Frequency=2.462 GHz (Channel 11) tap0 no frequency information. 修改当前信道 ...

2012-05-19 · 1 min · 167 words · -

无线WI-FI路由器的信道选择

无线WI-FI路由器的信道选择 http://blog.solrex.org/articles/wifi-channel-choosing.html 很多人从来没有注意过路由器的 wifi 频道,以为只要笔记本电脑能连上,无线路由就没问题。但有个问题是很多移动设备不能支持全频道,其中即有功耗考虑,也有销售目标国家考虑。因此有条件时最好检测一下信噪比,选择一个最适合自己的频道,而不是让路由器启动时自己去选择。 但接着又有朋友说: "求普及..."。参考 Avinash Kaushik 在他的网站统计博客"Occam's Razor"成立 5 周年时的感慨 (这篇文章很值得一读,very inspiring) ,我想即使我不是专家,分享一下自己知道的这点儿事也不错。 切入正题,现在很多家庭都有了自己的无线 Wi-Fi 路由器,也有了各种接入互联网的移动设备: 笔记本、上网本、手机、平板电脑、电纸书、MID (已没落) 。很多移动设备联网时都会出现诡异问题,这篇文章仅仅关注其中一种诡异问题: 错误的信道 (Channel,也译为频道、频段) 配置导致无法联网或者信号较差。 精确的技术知识我就不解释了,感兴趣的同学可以去读 Wikipedia Wi-Fi 或者 IEEE 802.11 等词条。下面主要说明为什么需要配置无线信道以及如何选择无线信道。 为什么需要配置无线信道? 相信大家都使用过收音机。使用收音机时,都有一个选台的问题,无论你是用旋钮、按键或者触摸,你总要选定某个台,才能收听该台的节目。无线路由也一样。你家里的无线路由器会广播一个 SSID (就是你看到的无线连接名) ,点击该连接,就会使你的电脑调制到该连接所在信道进行通信。 但是使用收音机时,可能会有这样的问题: 1. 有些台根本收不到,比如你的收音机不是全波段的;2. 有些台杂音太大听不清,比如某些唢呐电台。同理到你的无线环境上,问题 1 转化为"笔记本电脑 (全波段收音机) 能连接无线路由器,但平板电脑 (非全波段收音机) 却无法连接";问题 2 转化为"能连接到无线路由器,但干扰太多,达不到最大的网速 (这个网速指 Wi-Fi 连接速度,与 ADSL 网速无关) "。 如果没有手动配置过,无线路由器会自动选择一个默认或者随机的信道进行广播和连接建立。在设备没有联网问题和周围没有别人使用时,这是 OK 的。 但如果你周围的人家都有无线设备,且大家用的都是同一款运营商赠送的无线路由器 (或无线猫) 时,那么极有可能所有人都选择了同一个信道进行通信。这就会造成很大的信号干扰,这一般影响不到网速——除非你家用的 ADSL 大于 4M,但会造成家里两台设备之间数据传输速度极慢,例如用豌豆荚往手机上无线发送视频文件时。 如果不巧的是你家无线路由器会随机选择信道,那么它极有可能选择到一个你设备不支持的信道。我就曾经遇到过爱国者某型号 MID 只支持信道 1-9 但无线路由器自己选择了信道 11 的情况,那是死活也连不上啊!移动设备出于降低功耗或其它考虑,不支持某些信道是很正常的;再加上不同国家对无线信道管制情况不同 (参见 List of WLAN Channels) ,其它国家的水货设备到了国内可能也会水土不服。 幸运的是,你不能控制广播电台的波段,却可以控制自家无线路由器的无线信道。修改无线信道的方法请参考各路由器厂商的帮助文档,或者在网上寻求帮助。不过在修改之前,你还面临着,我该改到哪个信道呢? 如何选择无线信道? 首先,要选择自己通信设备都支持的信道。不过在此之前,首先确认所有设备都支持同一协议,比如你移动终端不支持 IEEE 802.11n,你非得在路由器上用 802.11n 协议,这就是找不自在了。这些知识要参考设备的手册,或者自己尝试。在 Linux 系统中,可以用 iwlist channel 列出移动终端支持的所有信道,比如 Kindle 支持的信道就是 (看到这里我基本可以肯定那哥们 Kindle 问题不是因为信道了,除非他用的是日本产路由器) : [root@kindle root]# iwlist channel lo no frequency information. ...

2012-05-19 · 2 min · 245 words · -

set command

set command set 命令 作用主要是显示系统中已经存在的shell变量 (是变量, 不是环境变量),以及设置shell变量的新变量值。使用 set 更改 shell 特性时,符号"+“和”-“的作用分别是打开和关闭指定的模式。set 命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare 命令以变量名=值 的格式进行定义即可。 使用declare命令定义一个新的环境变量"mylove”,并且将其值设置为"Visual C++",输入如下命令: #定义新环境变量, 注意: 值必须带引号 declare foo='bar' 再使用set命令将新定义的变量输出为环境变量,输入如下命令: #设置为环境变量 set -a foo 执行该命令后,将会新添加对应的环境变量。用户可以使用env命令和grep命令分别显示和搜索环境变量"mylove",输入命令如下: #显示环境变量值 env | grep foo 此时,该命令执行后,将输出查询到的环境变量值。 选项 -a:标示已修改的变量,以供输出至环境变量。 -b:使被中止的后台程序立刻回报执行状态。 -C:转向所产生的文件无法覆盖已存在的文件。 -d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e:若指令传回值不等于0,则立即退出shell。 -f:取消使用通配符。 -h:自动记录函数的所在位置。 -H Shell:可利用"!"加<指令编号>的方式来执行history中记录的指令。 -k:指令所给的参数都会被视为此指令的环境变量。 -l:记录for循环的变量名称。 -m:使用监视模式。 -n:只读取指令,而不实际执行。 -p:启动优先顺序模式。 -P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。 -t:执行完随后的指令,即退出shell。 -u:当执行时使用到未定义过的变量,则显示错误信息。 -v:显示shell所读取的输入值。 -x:执行指令后,会先显示该指令及所下的参数。 -e 若指令传回值不等于 0,则立即退出 shell。 ...

2012-05-10 · 1 min · 193 words · -