分类目录归档:佳佳教程

设置Linux端口封闭

设置端口封闭是为了尽可能保证服务器安全,以免不必要的麻烦。另外,设置mysql端口对外封闭可以大大减小被爆破的风险。

对于一个普通的网站服务器来说,只要留下几个端口即可,如果还有其它的服务需求,也可以再多留几个。

设置端口封闭需要用到iptables,用它实际上可以设置很多通讯相关的东西这里仅写一下开放部分端口的方法(因为我刚刚这么做了。。

iptables -t filter -A INPUT -i lo -j ACCEPT			#回环,允许本地请求访问本地端口
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  #允许本地发起的连接接收数据,这一行很重要,没有它会造成服务器对外发出的请求无法接受到数据
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT     #留下ssh端口
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT     #留下http端口
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT     #留下https端口
iptables -t filter -A INPUT -p udp --dport 500 -j ACCEPT     #不知是啥,反正无害
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT     #不是DNS服务器的话可以去点这行以及下一行
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 1701 -j ACCEPT     #不知是啥

# 允许PING
iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#其他请求(没有和上面匹配的请求)全部丢弃,也就是封闭其他端口
iptables -t filter -P INPUT DROP

此时也就已经实现了我本来需要的目的:阻止外部连接到我的数据库。

由于iptables的设置是即时生效的,所以千万不要一开始在终端就输入上面的最后一句,一旦输入了。。。你就连不上了(所以我才把它放在最后一行)
然后把它们放进一个shell文件里运行它,或者直接加进开机启动项。

要是你要问我为啥不用iptables自带的保存呢,我只能说:好麻烦。。。。

windows下创建.htaccess文件

一定有不少人尝试过在win下建立一个.htaccess文件,一般都是先右键新建一个文本文档,然后把它的名字改成.htaccess,然后windows会告诉你一定要输入文件名。(虽然不知道windows为什么要这样做不过看起来好像很高级的样子呢!

那怎么办呢?去找一个现成的.htaccess文件复制过来吗?

当然不是咯,实际上windows也可以命名点点开头的文件,比如你用cmd重命名文件就不会有这样的提示。

不过先创建一个文件再重命名还是有点繁琐,不如直接创建一个.htaccess文件。虽然cmd里没有创建空文件的命令,不过利用输出重定向,很多没有输出内容的命令也是可以用来创建空文件的。

首先在要创建的目录按住shift并右键,点“在此处打开命令窗口”,跳出来一个cmd窗口,然后输入

cls >.htaccess

一个.htaccess文件就出来了,`cls` 是清空控制台内容的命令,此命令没有输出,所以重定向到.htaccess文件就创建了一个空文件。

更新:有些情况下cls创建的不是空文件,请尝试以下方法。

同理,其他无输出命令也可以创建各种在图形模式下无法创建的文件。比如

cd . >.htaccess      #打开当前目录,无输出
exit >.htaccess      #创建.htaccess文件并关闭控制台

以及类似命令。

 

请尝试你的系统是否支持touch命令

如果你的系统支持touch命令,那么一切烦恼就都没有了。直接在控制台输入`touch .htaccess` 即可创建一个空的文件

正确地干掉AndroidServer进程

我用proxifier监控联网程序的时候,发现总是有一个名叫AndroidServer的脑残程序在请求一个不存在的本地端口,于是我就上度娘查了一下这是个什么鬼。

一查我就吓尿了,原来是TX的杰作。很多人说装了应用宝以后就有了这东西,不过我根本没有应用宝吖,我会装这种流氓软件吗?我会这么玷污我的电脑吗?我会这么糟蹋我的系统吗?当然不会!

那么这货是哪里来的呢?这电脑上我除了装了TX游戏,TX字典(此软件已成垃圾)和QQ就没有其它TX的东西了,那么现在问题来了!难道是被QQ捆绑安装的吗?这已经不重要了,既然已经被装了,那么只能想办法把它干掉。

根据度娘上找到的办法,禁用服务,可我没这服务;删除应用宝,可我没有应用宝;删了这程序,然后它又被装上了。。。。。
不存在服务但是它可以被启动就更进一步说明了其实是QQ把它启动的,难道我要删了QQ?这还确实有点难做到呢。。。
继续阅读正确地干掉AndroidServer进程

Linux定时检查程序运行状态

当初偶那么一不小心,不知怎么给PHP配了个和MySQL版本不匹配的so文件,于是我的数据库就经常因为某些兼容问题挂吖挂吖挂吖。。。动不动MySQL服务就会挂掉,但我又不知道该怎么搞出正确的库,所以只好搞这么一个时刻检查服务是否正确运行的办法来折中一下…

要让检查脚本自动定时执行,我们需要cron,linux里应该都自带了。然后我们需要一个检查脚本,来检查程序是否正在执行,如果不在执行,则启动它。

这里我已经写好了一个

#! /bin/sh
c=`ps -ef | grep 'mysql' |grep -v grep |wc -l`
if [ $c -eq 0 ]
then
	echo "MySQL is not running,starting it."
	echo `service mysql start`
	echo ""
else
	echo "MySQL running!"
fi

c=`ps -ef | grep 'apache2' |grep -v grep |wc -l`
if [ $c -eq 0 ]
then
	echo "Apache2 is not running,starting it."
	echo `service apache2 start`
	echo ""
else
	echo "Apache2 running!"
fi

c=`ps -ef | grep 'sshd' |grep -v grep |wc -l`
if [ $c -eq 0 ]
then
	echo "SSH is not running,starting it."
	echo `service sshd start`
	echo ""
else
	echo "SSH running!"
fi

echo "Service checked done!"

这是一个检查apache2,mysql和ssh三个重要服务的脚本,当发现程序不在运行,脚本就会启动服务。
继续阅读Linux定时检查程序运行状态

setTimeout和setInterval的用法

由于我的js没有正规学习过,所以码东西的时候总会有一些新发现,这两天写弹幕播放器的时候我又发现了定时函数的新用法,于是来记录一下。

一开始我从w3school学习了setTimeout的基本用法,他的例子是这样的

<html>
<head>
<script type="text/javascript">
function timedMsg()
 {
 var t=setTimeout("alert('5 seconds!')",5000)
 }
</script>
</head>

<body>
<form>
<input type="button" value="Display timed alertbox!" onClick="timedMsg()">
</form>
</body>
</html>

于是我后来就一直用引号围起要定时运行的内容。。。。。
继续阅读setTimeout和setInterval的用法

PHP获取文件大小

今天码PHP的时候碰到一个很蛋疼的问题,我在做文件床路由模块的时候测试用php输出文件下载,但是很大的文件永远下载不完整,浏览器只会下几百M然后就结束了。

于是我开始从文件输出部分开始一步步往回推,到最后发现原来是服务器告诉浏览器这个文件只有这么大,于是浏览器接收了这么多字节后就关闭连接了。

接着我就开始filesize各种大小的文件,发现大于4G的文件都会出现这样的情况,于是我就去php.net逛了一下,只见这血淋淋的一幕

NoteBecause PHP’s integer type is signed and many platforms use 32bit integers, some filesystem functions may return unexpected results for files which are larger than 2GB.

注意:因为PHP的整数类型是有符号整数并且很多平台还他喵的在用32位整数,一些文件系统相关的函数作用在大于2GB文件时可能返回感天动地的结果。

我只想说————————————坑爹呢这是!你都那么多代了这个函数还不升级一下简直有病吧! 继续阅读PHP获取文件大小

批量下载bloodcat的osu图

打开http://bloodcat.com/osu/,打开浏览器的控制台。
由于现在血猫变成了ajax加载多页,于是更加方便我们操作,多点几次下面的”더보기”(更多),这是这个页面上就有好多好多图了,接着把下面的代码复制进控制台按回车。

var as=document.querySelectorAll("a");var r="";
for(var i=0;i<as.length;i++){
if(as[i].href.search(/m\/\d+/)!=-1){r+=(as[i].href+"\n");}
}
console.log(r)

控制台里就会列出当前页面上有的所有图的下载地址,然后把这一串地址直接复制进迅雷这样的新建任务框里就OK了。

(由于迅雷还会提示已下载过任务,所以可以借助这个特性防止重复下载)

最简单的dll创建和调用

说好的最简单创建方法,所以这篇文章也会很简单。
我折腾了一晚上和半个下午,好不容易才解决了一大堆麻烦的问题,提炼出了网上各种麻烦代码的主要步骤

我一共用了两个文件:
2.cpp 生成2.dll文件
3.cpp 生成3.exe文件

这里省去了大部分教程里都要求包含的头文件

首先就是创建dll 继续阅读最简单的dll创建和调用

更方便的DOM选择器 querySelector

用过jQuery或者一些其它js库的少年们都应该知道他们都有自己的选择器,使用起来各种方便各种狂拽酷霸吊,简化了原本元素获取的许多麻烦。

用jQuery来举个例子,比如你要获取id为f_ck的元素(第一个)

var e=$("#f_ck")

这样就得到了元素的jquery对象(注意这样获取到的不是元素本身,而是一个满足条件的元素的数组,配上一些方便的元素操作方法)
用传统的getelement的话会是这个样子

var e=document.getElementById("f_ck");

这么写明显长一点,而且只能获取有特定id的元素。
继续阅读更方便的DOM选择器 querySelector

创建一个最简单的windows窗口

最近好久没写有用的文章了,感觉有点对不起我的博客。。。于是我决定写个以前弃坑很久的win32窗口程序的创建方法

废话就不多说了,那么创建一个win32应用程序实际上要使用的代码并不多,但是微软的IDE自动创建的代码却很复杂,新版的VS情况已经好转,至少中文注释也有了,代码也清晰了。

创建窗口在我现在的知识水平来说,需要以下几个步骤
·做消息处理方法
·定义窗口类和窗口信息
·注册窗口类
·创建窗口
·显示窗口
·写消息循环

继续阅读创建一个最简单的windows窗口

[javascript]知道你的浏览器显示区大小

实在没啥好写的来凑个数。。。

前端码农在做界面的时候有的时候需要知道窗口大小,特别是做响应式布局页面的时候需要看看大约多大合适,然后又使用的chrome或者其它没有这种特殊功能的浏览器,懒得另外装什么插件,于是你可以像我一样这么做。

首先按Ctrl+Shift+J或者其他你知道的方法调出控制台(不是系统控制台,是浏览器控制台),然后输入如下代码

window.onresize=function (){
console.log("宽:"+window.innerWidth+",高:"+window.innerHeight);
}

然后改变你的浏览器尺寸,显示区的长宽就会出现在控制台里了。一般做页面只要知道宽,除非你的页面和win8风格一样是横过来的。。。