[转帖]销毁mpd遗留的ng接口

问题:

MPD在长时间使用后,特别是有大量非正常断开的连接,会在系统中残留许多ng界面,如果这些界面不能及时销毁,则在重启mpd时会导致mpd挂起。
本例的目的就是销毁所有的mpd连接。

代码:

#!/bin/sh
for var in $(ifconfig grep ng cut -f 1 -d “:”) ; do
ngctl shutdown $var:
done

解释:

1、MPD使用了netgraph框架,包括PPPoE在内的所有的连接都使用了ng,相当于多了一个ng*的网卡,可以使用ifconfig看到:

 root@test:~ # ifconfig ng1
ng1: flags=88d1 metric 0 mtu 1478
inet 192.168.1.3 –> 192.168.192.101 netmask 0xffffffff

注意netmask,这个mask是全1的,相当于/32,表示这是这单一的主机,但是其他界面,比如pptp等就不一定了。

2、系统中所有的ng界面可以用grep来查出,注意下面结果中的mtu,各不相同,这是windows和路由器的区别,各家路由器也不尽相同,常见的值有1466,1478,1480,1492等:

root@test:~ # ifconfig grep ng
ng0: flags=88d1 metric 0 mtu 1480
ng3: flags=88d1 metric 0 mtu 1480
ng7: flags=88d1 metric 0 mtu 1492
……

3、netgraph有个管理工具,叫做“ngctl”,可以用它来创建、连接、销毁ng界面在本例中,我们用它来销毁功能,对应的子命令是shutdown,命令格式为:

 ngctl shutdown

这个path就对应netgraph的一个路径,这又是一个很长的话题,在本文中,我们可以写作:

 ng*:

*为数字,注意后面有个冒号,冒号后面应该再跟一些东西,但是本例只能ng*操作,所以后面的就忽略了。
比如要销毁ng0,那么对应的命令如下,注意最后面有个英文的冒号:

ngctl shutdown ng0:

4、for命令,是基本的shell命令了,不再赘述。

[转帖]dummynet 的 pipe 限速误区一则

  dummynet的限速功能是非常强悍的,早期pf限速都使用dummynet,但是有很多新手老是抱怨出问题,特别是使用pipe以后,网速变的特别慢,即使是FreeBSD的官方论坛,每隔几页就会有个抱怨pipe的帖子。
其实不是dummynet不好用,而是方法不对。
大多数新手把限速设置为下面的语句:

ipfw pipe 10 config bw 300Kbit/s
ipfw add pipe 10 ip from any to any out via em0

想籍此规则达到出口300K的目的,但一旦加上此规则后,会发现网速明显变慢,甚至连30k的速度都达不到。

是什么原因呢?

顾名思义,pipe就相当于一个水管,上面的语句定义了一个300Kbit/s的水管,水再多也就按照这个水管慢慢跑。

但是还有个问题,就是多少个IP用这一个水管?或者换一种说法:是一个IP一根水管,还是所有的IP一个水管?再深入一点的问题:哪个参数决定了多少个IP共用一个水管?

其实在ipfw的man中,明确提到了这个参数,就是mask,但是说的不是太明确。

Packets sent to a given pipe    or queue by an ipfw rule can be further classified into    multiple flows,    each of    which is then sent to a different dynamic pipe or queue.  A flow identifier is constructed by masking the IP addresses, ports and protocol types as specified with the mask options in the configuration of the pipe or queue.  For each different flow identifier, a new pipe or queue is created with the same parameters as the original object, and matching packets are sent to it.

这段文字的意思是:ipfw送到pipe或queue的数据包,会被分成多个流,然后再把这些流送到不同的动态pipe或queue。一个流的标识是由mask参数所masking的IP、端口或协议类型所组成的。为每一个同的流而创建新的pipe或queue。

这个说明稍微有点模糊,基本上表达了它的意思。但是没有说明一个流的标识符到底是怎么样masking的,经常编程的人一般都能明白,但大多数人可就没有那么幸运了。

其实masking就是求“AND”的过程,比如IP,把进来的IP和mask相“与”,结果就是流的标识符。
比如mask设置为0x000000ff,数据包的IP是192.168.0.11,两者求“与”,结果就是11,那么就会为这个11号流创建一个水管。
另外一个包是192.168.0.12,那么就会为12号流创建另一个水管。

那么另外一种情况:有个数据包的IP是192.168.1.11,标识符是多少呢?
192.168.1.11 & 0x000000ff,结果也是11,标识符同样是11,那么它就会和192.168.0.11共用同一个水管,也就是两个IP会共用300Kbit/s的带宽!

那么再看一种极端的情况,其实也就是上面例子的情况,如果mask为0x00000000,会发生什么样的事情呢?
0x0和任何数相与,结果都相等,为0,这就意味着,所以的IP都“共享”300kbit/s的带宽!

另一个极端就要想每个IP独享一个300Kbit/s的水管,那么就设置为0xffffffff好了,每个IP一个水管,互不干涉。

回到上面的例子,mask的默认值是多少?经过试验(还没找到源代码),默认应该是0x0,也就是所有IP的所有流量,都会走一个300Kbit/s的小水管,不慢才怪呢!

另外还要注意几个地方:
1)mask是可以分方向的,分为dst-ip mask,src-ip mask,还有dst-port mask,src-port mask,在写规则的时候,最好一弄清方向。
2)目前,flow的标识符是8位的,源代码中用了&0xff,所以显示的最高数值也就是255,但是会出现多个相同的值,比如在大的网络中,会出现多个11,不影响效果,但是不好区分到底是哪一个网段的11,修改办法可以参照我另外的帖子。

取消 yum 损坏。Broke Fedora after accidentally cancelled yum update

https://serverfault.com/questions/681486/broke-fedora-after-accidentally-cancelled-yum-update

 

I just did the same thing on a Fedora 22 system. I couldn’t upgrade or reinstall any of the packages. Running package-cleanup –cleandups wanted to remove glibc, which wanted to pretty much all of the packages on the system.

To resolve the issue, I performed a distro-sync on all of the duplicate packages.

sudo package-cleanup --dupes | perl -pe 's/-\d+.*$//' | sort -u | grep -vP '^Loaded' | xargs sudo dnf distro-sync -y

Then followed up with

sudo dnf upgrade
sudo package-cleanup --cleandupes

电信 光纤猫 贝尔E8-C-EPON 破解超级管理员密码

二、破解超级管理员密码

1、打开 http://192.168.1.1,用光纤猫上的账户密码进行登录。

2、下载 http://192.168.1.1/backupsettings.conf

3、用记事本或者任何能打开 .conf 的软件(比如 SublimeText)打开backupsettings.conf,然后 ctrl+f 查找 Password,这就是你的超级管理员密码。

4、再次打开 http://192.168.1.1,如果之前的还登陆着,先退出,然后用账号名为 telecomadmin,密码为你之前找到的 Password 进行登录。现在我们就能看到完整的设置界面了。

TCPing 工具介绍

TCPing 介绍

TCPing 和 Ping 工具非常类似,但与之不同的是,它通过 TCP 端口工作。TCPing 还支持监听具体某个端口的状态。

因此,即使服务器禁止 Ping,也可以通过 TCPing 来测试与服务器的连接。

TCPing 客户端下载

来自 kirchner 源代码的 TCPing

来自 Eli Fulkerson 源代码的 TCPing

来自 richard 源代码的 TCPing

Eli Fulkerson 写的 TCPing 工具更加强大,可以输出连接时间等信息。而 kirchner 的版本只能输出此端口是否打开。

Linux 用户如果需要更加强大的 TCPing 工具,可以使用此脚本:

安装方法:

  1. 安装 tcptraceroute:

Debian / Ubuntu 用户:

sudo apt-get install tcptraceroute

CentOS / REHL 用户,设置 RepoForge 先,再:

sudo yum install tcptraceroute
  1. 下载 tcpping 脚本:
cd /usr/bin
sudo wget http://www.vdberg.org/~richard/tcpping
sudo chmod 755 tcpping

TCPing 工具使用方法

  • Windows 用户可以将其放入 X:\Windows\System32 文件夹下(X 代表系统分区),然后就可以直接在 CMD 命令行中使用。
  • 类 Unix 系统请自行在 /bin 或其他目录下放置可执行文件或软链接。

具体用法可参见各客户端原网站。

 

 

from : http://tookdes.org/geek/archives/tcping-intro.html

如何测试连接MsSQL/SQL Server数据库 from 阿里云

如果您所使用的 SQL Server 数据库连不上,可以通过这个方法进行测试数据库连接。

温馨提示:

  • .本方法只适用于测试SqlServer数据库连接,请核对您输入的是SqlServer的数据库信息。本文档不适用于MySql数据库。
  • 如何查看数据库信息

测试连接方法:

1.打开记事本,不要写任何字,然后保存为 dsds.udl (即为重命名)到桌面。

2.双击刚刚保存的文件。

3.输入数据库的地址数据库账号密码数据库名称。

 

4.单击“测试连接”,提示连接成功。

 

 

How to upload to Google Cloud Storage buckets using CURL

Signed URLs are pretty nifty feature given by Google Cloud Platform to let anyone access your cloud storage (bucket or any file in the bucket) without need to sign in.

Official documentation gives step by step details as to how to read/write to the bucket using gsutil or through a program. This article will tell you how to upload a file to the bucket using curl so that any client which doesn’t have cloud SDK installed can do this using a simple script.
This command creates a signed PUT URL for your bucket.
 gsutil signurl -c 'text/plain' -m PUT serviceAccount.json gs://test_bucket_location  

Here is my URL:

 https://storage.googleapis.com/test_sl?GoogleAccessId=my-project-id@appspot.gserviceaccount.com&Expires=1490266627&Signature=UfKBNHWtjLKSBEcUQUKDeQtSQV6YCleE9hGG%2BCxVEjDOmkDxwkC%2BPtEg63pjDBHyKhVOnhspP1%2FAVSr%2B%2Fty8Ps7MSQ0lM2YHkbPeqjTiUcAfsbdcuXUMbe3p8FysRUFMe2dSikehBJWtbYtjb%2BNCw3L09c7fLFyAoJafIcnoIz7iJGP%2Br6gAUkSnZXgbVjr6wjN%2FIaudXIqAxyz4O6VU%2FIob8RHmfYBD3rYw8oRmZer0g%2BMTDw5Bu3%2BdjbxCriCOkOLWkvlpBGvd71hRP89lxpD%2FwX1N1pzAiRBpmKAhpKrYrq8h4kNLAtTHXYSz5j%2Bzb28UD4YMG52n8UpfyPgFIg%3D%3D  

Now this command will upload a text file to the bucket using the signed URL we created:

 $ curl -X PUT -H 'content-type: text/plain' -d @test_upload.txt https://storage.googleapis.com/test_sl?GoogleAccessId=my-project-id@appspot.gserviceaccount.com&Expires=1490266627&Signature=UfKBNHWtjLKSBEcUQUKDeQtSQV6YCleE9hGG%2BCxVEjDOmkDxwkC%2BPtEg63pjDBHyKhVOnhspP1%2FAVSr%2B%2Fty8Ps7MSQ0lM2YHkbPeqjTiUcAfsbdcuXUMbe3p8FysRUFMe2dSikehBJWtbYtjb%2BNCw3L09c7fLFyAoJafIcnoIz7iJGP%2Br6gAUkSnZXgbVjr6wjN%2FIaudXIqAxyz4O6VU%2FIob8RHmfYBD3rYw8oRmZer0g%2BMTDw5Bu3%2BdjbxCriCOkOLWkvlpBGvd71hRP89lxpD%2FwX1N1pzAiRBpmKAhpKrYrq8h4kNLAtTHXYSz5j%2Bzb28UD4YMG52n8UpfyPgFIg%3D%3D  

On similar lines, you can create a RESUMABLE URL and then upload file using following command:

 $ curl -v -X 'POST' -H 'content-type: text/plain' -H 'x-goog-resumable:start' '[signed url]' -d ''  

This command gives ‘session URI’ which is similar to signed url, but longer!

 $ curl -v -X PUT -d @test_upload.txt -H 'content-type: text/plain' '[session URI]'  

Simple isn’t it!

 

 

 

http://opreview.blogspot.jp/2017/03/how-to-upload-to-google-cloud-storage.html

iOS tab bar icon size。

You should prepare 3 images icons for each tab bar item (1x, 2x and 3x).

First create the 3x at 75w 75h pixels (maximum: 144 x 96) and save it as iconTab0@3x.png.

Then resize it to 50w 50h pixels (maximum: 96 x 64) and save it as iconTab0@2x.png.

Finally resize it to 25w 25h pixels (maximum: 48 x 32) and save it as iconTab0.png.

Now all you need is to select those 3 images at your finder and drag them to your image assets.

 

 

enter image description here

enter image description here

一行命令用Python建HTTP服务器

打开命令行,输入下面的代码:

python -mSimpleHTTPServer

就能在当前目录下运行一个HTTP服务器。
当前目录不知道是什么的话,看你的命令行的提示就行了。

访问很简单,打开下面的网址,就能看到你当前文件夹下的文件:

http://你的IP地址:8000/


如果你在当前文件夹下放了个index.html文件,那么打开下面的网址,就能看到这个index.html的内容了:

http://localhost:8000/