Linux下用libpcap库写一个简单的C嗅探程序(记录)

2013年11月12日 评论已被关闭
一、准备工作:

安装库lipcap库文件:
yum -y install gcc gcc-c++
yum -y install libpcap libpcap-devel

二、源码:

将下面代码保存为mm.c文件:

三、编译运行:

分类: 编程开发 标签: , ,

PHP中eval函数导致HTTP 500错误的解决方法

2013年9月27日 评论已被关闭

使用php eval函数来执行PHP代码时,常常由于提交给eval函数执行的代码不是合法的PHP代码,而导致http服务返回"HTTP/1.0 500 Internal Server Error"错误。尝试使用下面方式进行异常处理:

或者:

后发现页面依然返回http 500错误,在网上google一下才发现这是一个bug,通过下面方式得以解决:

或者:

分类: 编程开发 标签: , ,

PHP计算字符串长度,中文长度为2,英文为1

2013年9月26日 评论已被关闭

PHP计算字符串长度,中文长度为2,英文为1

分类: 编程开发 标签: ,

Linux下LAMP服务selinux权限问题

2013年9月17日 评论已被关闭

我们在开启了selinx的linux系统中,即使正确的设置了文件系统权限,常常还是会出现权限问题,这是我们要思考是不是selinx引起的了。

1、mysql:

selinux打开的前提下,修改/etc/my.cnf中mysqld数据路径后启动Mysql服务出错,查看/var/log/mysql.log提示:

给目录设置selinux权限:

再次启动mysql服务提示:

执行mysql_install_db创建mysql数据库,然后启动mysql成功:

2、httpd站点:

在selinux打开的前提下,运行PHP代码在/var/log/http/下错误日志中发现如下错误:

配置站点目录的selinux权限即可:

3、关闭selinux:

修改/etc/sysconfig/selinux文件,将SELINUX=enforcing改成SELINUX=disabled并重启服务器,即能永久关闭selinux.

分类: Linux 标签: , , , , ,

连接Mysql提示Can’t connect to local MySQL server through socket的解决方法

2013年9月6日 2 条评论

mysqlmysqldumpmysqldump,php连接mysql服务常会提示下面错误:


产生此问题的原因一般有两个:

1、mysql服务未正常运行:

由于mysql的socket文件是由mysqld服务启动时创建的,如果mysqld服务未正常启动,socket文件自然也不会被创建,当然会找不到socket文件了。对于判断mysql服务是否启动,我们可以使用下面命令:


2、socket文件路径在配置文件中设置不完整:

这一般是由于我们修改了mysql配置“/etc/my.cnf”引起的。比如我们修改了配置文件中“[mysql]”选项下的“socket”参数,而未指定“[client]”、“[mysql]”选项的“socket”参数,导致mysql使用默认的socket文件位置去寻找socket文件,从而导致未找到socket文件而引发此错误。


解决办法:

下面是解决方法,更详细的介绍可以参考:http://aiezu.com/article/mysql_cant_connect_through_socket.html

1、mysql服务未正常运行:

如果是服务未启动,我们运行“service mysqld start”启动服务即可。如果服务启动不了,就去查看mysql服务日志,寻找原因并解决再启动


2、完善mysql配置文件:

如果确认mysql服务正常运行,还提示文章标题的此错误,那就是“/etc/my.cnf”配置文件的问题了。解决办法是修改“/etc/my.cnf”配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下:

其中socket等于的路径就是socket文件的位置,我们只要修改my.cnf文件,告诉mysql,mysqldump,mysqladmin等命令,mysql服务的socket文件位置在哪里,然后重启mysqld服务即可。


3、php连接mysql服务提示"Can't connect to local MySQL server through socket..."的解决方法

有时候mysql服务正常运行,用户名密码也完全正确,使用php的mysql_connect函数却连接不了mysql,调用php的mysql_error()函数提示“Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'”,这是我们需要修改/etc/php.ini文件。
在/etc/php.ini文件中"[MySQL]"项下找到"mysql.default_socket",并设置其值指向正确的mysql服务socket文件即可,如:


4、python连接mysql提示"Can't connect to local MySQL server through socket..."的解决方法:

在连接mysql数据库函数中指定socket文件,如下:


5. php pdo连接mysql提示"Can't connect to local MySQL server through socket..."的解决方法:

同样在连接字符串添加mysql socket文件的位置即可,如下:

分类: 数据库 标签: , ,

Linux下启动C/C++守护进程的bash脚本(工作记录)

2013年9月3日 没有评论

本脚本是在工作中,为了方便管理,写的一个用来启动C/C++守护进程的脚本,记录一下

将代码保存为appadmin.sh文件,并给文件添加可执行权限即可使用

分类: 编程开发 标签: , , ,

Javascript计算两个GPS坐标的距离

2013年8月29日 没有评论

下面是JS计算两个GPS点距离的函数:

PHP计算两个GPS点之间的距离
Mysql计算两GPS坐标的距离
javascript计算两个GPS点之间的距离

更多关于GPS计算请参考:http://www.movable-type.co.uk/scripts/latlong.html

分类: 编程开发 标签: , ,

PHP计算两个GPS点之间的距离

2013年8月29日 没有评论

下面是PHP计算两个GPS点距离的函数:

PHP计算两个GPS点之间的距离
Mysql计算两GPS坐标的距离
javascript计算两个GPS点之间的距离

调用方法:

更多关于GPS计算请参考:http://www.movable-type.co.uk/scripts/latlong.html

分类: 编程开发 标签: , ,

Mysql计算两GPS坐标的距离

2013年8月24日 没有评论

mysql计算两GPS坐标的距离函数:

PHP计算两个GPS点之间的距离
Mysql计算两GPS坐标的距离
javascript计算两个GPS点之间的距离

Mysql计算两GPS坐标的距离SQL语句:

更多关于GPS计算请参考:http://www.movable-type.co.uk/scripts/latlong.html

错误及解决方法:

在创建函数前报如下错误:

解决方法:

在创建函数前执行下面SQL语句:

或者修改my.cnf文件并重启mysqld服务:

分类: 数据库 标签: ,

php curl_multi系列函数实现多线程抓取网页

2013年7月11日 1 条评论

最近几天在做一个多搜索引擎关键字排名查询工具,用于及时方便的了解关键词在各大搜索引擎的排名。

在抓取360搜索的时候,发现360搜索每页只支持显示10个搜索结果,如果想获取100个搜索结果数据,就得搜索10次,十分影响用户体验,没有人会为了查询一次关键字排名而愿意等待打开10次的网页时间。

这时我想到了用多线程做并发抓取,正好php curlcurl_multi系列函数能实现此功能。


一、curl_multi系列的函数介绍:
1. curl_multi_init:

用来初始化一个"curl_multi"句柄,然后将多个"curl_init"函数生成的"curl"句柄传递给"curl_multi"句柄;此函数不需要然后参数。


2. curl_multi_add_handle:

"curl_multi_add_handle"函数用来将"curl_init"生成的"curl"句柄添加到上面"curl_multi_init"函数生成的"curl_multi"句柄。"curl_multi_add_handle"函数的第一个参数为"curl_multi"句柄,第二个参数为"curl"句柄。


3. curl_multi_exec:

"curl_multi_exec"用于发起curl_multi请求。"curl_multi_add_handle"函数的第一个参数为"curl_multi"句柄,第二个参数是一个"引用参数",它记录未处理完成的请求数,当第二个参数值变为0时,代表所有的请求都已经处理完成(所有请求成功返回或者到达超时时间)。


4. curl_multi_info_read:

"curl_multi_info_read"函数用来读取curl_multi句柄是否有curl返回信息,如果有则返回最先的"curl返回值(数组形式)",否则返回"false",循环调用此函数,直到其返回"false";"curl_multi_info_read"的参数为"curl_mulit"句柄。


5. curl_multi_getcontent:

当所有curl句柄处理完成,这时我们就可以使用"curl_multi_getcontent"函数读取"curl"的返回内容了。"curl_multi_getcontent"的参数为"curl"句柄。


6. curl_multi_remove_handle:

读取完内容后,使用"curl_multi_remove_handle"函数从"curl_mulit"句柄中移出所有"curl"句柄。"curl_multi_remove_handle"函数的第一个参数为"curl_multi"句柄,第二个参数为"curl"句柄。


7. curl_multi_close:

"curl_multi_close"函数用于关闭"curl_mulit"句柄,释放占用的资源。"curl_multi_close"的参数为"curl_mulit"句柄。


二、curl_multi使用流程:

1、 "curl_multi_init"初始化"curl_multi"句柄;
2、 循环创建并添加"curl"句柄,并用"curl_multi_add_handle"函数将其添加到"curl_multi"句柄;
3、 使用"curl_multi_exec"发起请求,并等待所有请求处理完成;
4、 使用"curl_multi_info_read"函数读取返回值;
5、 使用"curl_multi_getcontent"函数读取返回内容;
6、 使用"curl_multi_remove_handle"函数移除curl句柄;
7、 使用"curl_multi_close"关闭curl_multi句柄。

三、下面是我使用curl_multi多线程并发抓取360搜索返回结果的代码片段:


常见错误:

1、调用curl_multi系列函数时出现如下错误:

解答:1、需要php5版本才支持curl_multi系列函数;2.需要开启php curl扩展,windows: 在php.ini中把";extension=php_curl.dll"前面的分号去掉; linux:确认/etc/php.ini或者"/etc/php.d/curl.ini"中有类似"extension=curl.so"的行,并重启apache;

2、调用curl系列函数时出现如下错误:

解答:同上。

3、用curl抓取网页时,发现网页的中文是乱码:

解答:这是由于被抓取的网页编码与您的网页编码不一致引起的,设置"curl_setopt($ch, CURLOPT_HEADER, 1);"可以返回http头,然后从中查看到类似"Content-Type: text/html; charset=gb2312"的行,从中可以看出其编码为"gb2312"在使用$html = iconv("gb2312", "utf-8//ignore", $html); 将编码转为一致即可。