简介
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
输出信息含义执行netstat后,其输出结果为
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 02210.34.6.89:telnet 210.34.6.96:2873ESTABLISHED
tcp 2960210.34.6.89:1165210.34.6.84:netbios-ssn ESTABLISHED
tcp 00localhost.localdom:9001localhost.localdom:1162ESTABLISHED
tcp 00localhost.localdom:1162localhost.localdom:9001ESTABLISHED
tcp 080210.34.6.89:1161210.34.6.10:netbios-ssn CLOSE
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 1[ ] STREAM CONNECTED 16178@000000dd
unix 1[ ] STREAM CONNECTED 16176@000000dc
unix 9[ ] DGRAM 5292/dev/log
unix 1[ ] STREAM CONNECTED 16182@000000df
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
常见参数-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
实用命令实例
1. 列出所有端口 (包括监听和未监听的) 列出所有端口 netstat -a
# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 00localhost:30037*:* LISTEN
udp 00*:bootpc *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2[ ACC ] STREAM LISTENING 6135/tmp/.X11-unix/X0
unix 2[ ACC ] STREAM LISTENING 5140/var/run/acpid.socket
列出所有 tcp 端口 netstat -at
# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 00localhost:30037*:* LISTEN
tcp 00localhost:ipp *:* LISTEN
tcp 00*:smtp *:* LISTEN
tcp6 00localhost:ipp [::]:* LISTEN
列出所有 udp 端口 netstat -au
# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 00*:bootpc *:*
udp 00*:49119*:*
udp 00*:mdns *:*
2. 列出所有处于监听状态的 Sockets 只显示监听端口 netstat -l
# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 00localhost:ipp *:* LISTEN
tcp6 00localhost:ipp [::]:* LISTEN
udp 00*:49119*:*
只列出所有监听 tcp 端口 netstat -lt
# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 00localhost:30037*:* LISTEN
tcp 00*:smtp *:* LISTEN
tcp6 00localhost:ipp [::]:* LISTEN
只列出所有监听 udp 端口 netstat -lu
# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 00*:49119*:*
udp 00*:mdns *:*
只列出所有监听 UNIX 端口 netstat -lx
# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2[ ACC ] STREAM LISTENING 6294private/maildrop
unix 2[ ACC ] STREAM LISTENING 6203public/cleanup
unix 2[ ACC ] STREAM LISTENING 6302private/ifmail
unix 2[ ACC ] STREAM LISTENING 6306private/bsmtp
3. 显示每个协议的统计信息 显示所有端口的统计信息 netstat -s
# netstat -s
Ip:
11150total packets received
1with invalid addresses
0forwarded
0incoming packets discarded
11149incoming packets delivered
11635requests sent out
Icmp:
0ICMP messages received
0input ICMP message failed.
Tcp:
582active connections openings
2failed connection attempts
25connection resets received
Udp:
1183packets received
4packets to unknown port received.
.....
显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
# netstat -st
# netstat -su
4. 在 netstat 输出中显示 PID 和进程名称 netstat -pnetstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 10ramesh-laptop.loc:47212192.168.185.75:www CLOSE_WAIT 2109/firefox
tcp 00ramesh-laptop.loc:52750lax:www ESTABLISHED 2109/firefox
5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
# netstat -an
如果只是不想让这三个名称中的一个被显示,使用以下命令
# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users
6. 持续输出 netstat 信息netstat 将每隔一秒输出网络信息。
# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 00ramesh-laptop.loc:36130101-101-181-225.ama:www ESTABLISHED
tcp 11ramesh-laptop.loc:52564101.11.169.230:www CLOSING
tcp 00ramesh-laptop.loc:43758server-101-101-43-2:www ESTABLISHED
tcp 11ramesh-laptop.loc:42367101.101.34.101:www CLOSING
^C
7. 显示系统不支持的地址族 (Address Families)netstat --verbose
在输出的末尾,会有如下的信息
netstat: no support for`AF IPX'on this system.
netstat: no support for`AF AX25'on this system.
netstat: no support for`AF X25'on this system.
netstat: no support for`AF NETROM'on this system.
8. 显示核心路由信息 netstat -r# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0* 255.255.255.0U 000eth2
link-local * 255.255.0.0U 000eth2
default192.168.1.10.0.0.0UG 000eth2
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
9. 找出程序运行的端口并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
# netstat -ap | grep ssh
tcp 10dev-db:ssh 101.174.100.22:39213CLOSE_WAIT -
tcp 10dev-db:ssh 101.174.100.22:57643CLOSE_WAIT -
找出运行在指定端口的进程
# netstat -an | grep ':80'
10. 显示网络接口列表# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500000000000BMU
eth2 150002619600026883600BMRU
lo 16436040004000LRU
显示详细信息,像是 ifconfig 使用 netstat -ie:
# netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
UP BROADCAST MULTICAST MTU:1500Metric:1
RX packets:0errors:0dropped:0overruns:0frame:0
TX packets:0errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:1000
RX bytes:0(0.0B) TX bytes:0(0.0B)
Memory:f6ae0000-f6b00000
11. IP和TCP分析 查看连接某服务端口最多的的IP地址
wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22"|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
18221.136.168.36
3154.74.45.242
278.173.31.236
262.183.207.98
2192.168.1.14
2182.48.111.215
2124.193.219.34
2119.145.41.2
2114.255.41.30
175.102.11.99
TCP各种状态列表
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT
先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c
143ESTABLISHED
1FIN_WAIT1
1Foreign
1LAST_ACK
36LISTEN
6SYN_SENT
113TIME_WAIT
1established)
最后的命令如下:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
分析access.log获得访问前10位的ip地址awk '{print $1}'access.log |sort|uniq -c|sort -nr|head -10
参考资料:http://blog.maxiang.net/10-netstat-command-examples/139/
http://www.ipcpu.com/2011/07/netstat-linux/
安装好Debian后还不能使用sudo
如果没有安装sudo,则在root用户下apt-get install sudo
在root设置sudoers配制文件
chmod +w /etc/sudoers
vim /etc/sudoers
添加一行 username ALL=(ALL) ALL
其中username是你的用户名,保存
更改sudoers文件权限 chmod 0440 /etc/sudoers
退出root
Ubuntu安装VMware Workstation8.0.3
由于使用Ubuntu的人比较少,网上关于Ubuntu的资料也很少,笔者在安装VMware Workstation时就遇到了问题,首先网上关于Ubuntu12.04先行版的内容比较少,其次关于在Ubuntu12.04下安装VMware Workstation8.0.3最新版的资料就更少。
我遇到的问题是:
1.
下载好VMware Workstation8.0.3的bundle版本(linux)后,无法运行
2. 经过几番折腾终于能运行安装后,却无法运行VMware Workstation8.0.3
3. 安装完VMware Workstation后,通常我们要更改一些设置来优化,但是却也改不了。
4. 安装完后,想卸载怎么办? www.2cto.com
基于以上我遇到的几点问题,经过我半天的努力“折腾”终于解决了,半天啊!也够折磨人了,特此拿出来给大家分享,目的就是为了节省大家宝贵的时间!
一、下载最新VMware Workstation的bundle版本(linux)【这里笔者已上传至115网盘上了,免得大家还要从官网先注册再下载】
32位:http://115.com/file/e7ii0l33
64位:http://115.com/file/dpww9wzw
二、修改文件的属性
下载好后,我们要修改下文件的一个属性,目的是更改程序运行方式,具体如下:
进入下载文件的目录,找到下载文件(VMware-Workstation-Full-8.0.3-703057.i386.bundle),右击选择属性,选择权限选项卡,勾选“允许以程序执行文件”,完毕
或者也可以用终端命令的方式:
先cd到下载文件所在目录,然后输入
[plain]
chmod +x VMware-Workstation-Full-8.0.3-703057.i386.bundle
三、运行bundle安装程序,安装VMware Workstation8.0.3
四、下载针对linux内核的VMware Workstation8.0.2补丁
我们安装完后,运行VMware Workstation时无法运行,具体情况如下:
上面的意思是vmware的相关服务没有启动,要求你先启动服务再运行程序,然而启动服务的时候“Virtual Network Device”却怎么也启动不起来,这其实是Vmware对于最新版Ubuntu的
Linux内核的支持问题,因此需要下载个补丁才能解决此问题,下载地址如下: www.2cto.com
vmware802fixlinux320.tar.bz2:http://115.com/file/c28j2n5y
五、解压vmware802fixlinux320.tar.bz2,修改patch-modules_3.2.0.sh文件
在第7行,将vmreqver=8.0.2改为vmreqver=8.0.3,保存退出
因为这个补丁是针对8.0.2版本的,8.0.3版本直接运行这个的话是没有作用的。
六、以root权限运行patch-modules_3.2.0.sh
打开终端,利用“cd”命令进入patch-modules_3.2.0.sh所在文件目录下,并输入以下命令
[plain]
sudo ./patch-modules_3.2.0.sh
七、运行 ,安装VMware Workstation8.0.3,基本上一直next就行
八、安装完后,若想修改VMware Workstation的全局设置,需要以root运行程序
首先要进入VMware Workstation运行文件所在目录,默认是在“文件系统”里(文件系统是类似
windows的c盘里的window文件夹),具体位置是:/usr/bin/vmware
可以通过“主文件夹”进入,也可以通过终端进入,终端命令如下:
[plain]
<pre name="code" class="plain">cd ../
cd ../
cd usr
cd bin
sudo ./vmware
九、卸载VMware Workstation的方法
卸载VMware Workstation从“Ubuntu软件中心”是找不到的(我是没找到),那么卸载的方法其实跟第七步是类似的
首先要进入VMware Workstation卸载文件所在目录,同样是在“文件系统”里的“/usr/bin/”目录下,卸载我们只能通过终端来运行,命令如下:
[plain]
cd ../
cd ../ www.2cto.com
cd usr
cd bin
sudo ./vmware-uninstall
好啦,以上就是我关于Ubuntu下安装VMware Workstation8.0.3的一些心得,希望能给需要用的朋友一些帮助。
作者 wangpeng047
1/debian linux 系统密码破解
1.在grub选项菜单’Debian GNU/Linux,...(recovery mode)’,按e进入编辑模式
2.编辑kernel那行面的 ro single 改成 rw single init=/bin/bash,按b执行重启
3.进入后执行下列命令
root@(none)#mount -a
root@(none)#passwd root
root@(none)#reboot
2/debian linux系统密码破解
1、在Grub的引导装载程序菜单上,选择你要进入的条目,键入 “e” 来进入编辑模式;
2、在第二行(类似于kernel /vmlinuz-2.6.15 ro root=/dev/hda2 ),键入”e”进入编辑模式;
3、在句末加上”init=/bin/bash”,回车;
4、按“b”启动系统.
这样我们即可获得一个bash的shell,进入shell后,根分区的挂载模式默认是只读,我们要将其改为可写,否则不能更改root密码:
mount -no remount,rw /
passwd root
sync
mount -no remount,ro /
reboot
这样即可成功更改debian的root用户的密码.
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:
##############################################
#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispass/r"
interact
##############################################
1. [#!/usr/bin/expect]
这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
4. [expect "password:"]
这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒
5. [send "ispass/r"]
这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示: 命令字符串结尾别忘记加上 “/r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]
百度知道解答:
shell脚本 ,在linux 下运行一个shell脚本登陆远程unix 服务器
#!/usr/local/bin/expect
set timeout 10
spawn ssh root@ip
expect "*password*"
send "123456\r"
expect "#"
send "service crond restart\r"
expect eof
我的脚本:
set timeout 30
spawn ssh -l www-data 192.168.206.120
expect "*password:"
send "123456\r"
send "\r"
expect "$"
send "mysqldump -uroot -p123456 mysql > /data/webroot/mysql.sql\r"
send "cd\r"
send "tar vzcf mysql.sql.tar.gz mysql.sql\r"
expect eof
#!/usr/bin/expect
set timeout 30
spawn ssh -l www-data 192.168.206.120
expect "*password:"
send "123456\r"
send "\r"
expect "$"
send "mysqldump -uroot -p123456 mysql > /data/webroot/mysql.sql\r"
send "cd\r"
send "tar vzcf mysql.sql.tar.gz mysql.sql\r"
send "date\r"
expect eof
wuyao@wuyao-Insp
wuyao@wuyao-Inspiron-1427:~$ cat mysql_download_20120712.sh
#!/usr/bin/expect
spawn scp www-data@192.168.206.120:/data/webroot/mysql.sql.tar.gz /home/wuyao/
expect "password:"
send "123456\r"
expect "$"
send "mysql -uroot -p123456 mysql < /data/mysql.sql.tar.gz\r"
expect eof
mysqldump -uhigh_tv -phigh_tv -hdb199 -P3300 high_tv films > /data/webroot/high_tv.films.120711.sql
mysqldump: Got error: 1044: Access denied for user 'high_tv'@'192.168.1.%' to database 'high_tv' when doing LOCK TABLES
意思大概是拒绝high_tv用户访问,因为tables 被lock,但是可以用来正常的登陆。。。
所以需要一个命令来解除锁定
--skip-lock-tables
mysqldump -uhigh_tv -phigh_tv -hdb199 -P3300 --skip-lock-tables high_tv films > /data/webroot/high_tv.films.120711.sql
alias是一个非常有用的配置,在linux中,通过alias可以把一些常用但是又比较长的指令用一些简写代替。比如ls -al简写成ll,还有就是一些比较危险的指令最好加一个显示提示的选项,比如在rm的时候默认提示是否要删除等等,这些命令和设置都是非常好用的。
设置很简单,只要在 终端输入
$ alias ll='ls -al'
这样输入ll就显示的是ls -al的效果,很不错吧。但是这样有个问题就是,如果下次登入的时候,设置还是回到以前,怎么办?其实这样修改用户根目录下一个文件就可以了。
$ vim .bashrc(这里注明一下,因为我发觉vim这个比默认的vi好用,其实你用vi也是一样的效果,)
然后把下面几行
# some more ls aliases
alias ll='ls -al'
alias la='ls -A'
alias rm='rm -i'
alias l='ls -CF'
修改成需要的就可以了,注意前面如果有#的要删除,不然就被注释掉拉。上面是我的alias设定,你也可以结合自己需要配置自己的alias方式
在linux字符下面,颜色能帮助更好的区分不同的文件,在编辑脚本中,可以起到纠错的作用,下面就讲一下debian字符下颜色的开启和更改
ls命令是查看目录下面的文件,一般情况下会有颜色区分,但默认情况下debian是不开启的,所以这时候需要加一个参数 --color 用来开启ls命令的颜色显示。
更改ls 参数只能在这一次命令中有颜色效果,为了方便,可以开启shell的颜色
修改 .bashrc 文件
每次都带参数未免有些麻烦,最好的方法是把它写到默认配置文件 .bashrc 里,位于用户目录。
$ nano ~/.bashrc
代码:
# enable color support of ls and also add handy aliases
if["$term" !="dumb"];then
export LS_OPTIONS='--color=auto'
eva