
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <errno.h>
#include <dlfcn.h>
//定义我们自己的connect函数
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t
addrlen){
static int (*connect_linuxc)(int, const struct sockaddr*, socklen_t)=NULL
unsigned char *ip_char
//利用 lsym的RTLD_NEXT选项绕过LD_PRELOAD环境变量的connect方法找到c库的函数
if (!connect_linuxc) connect_linuxc=dlsym(RTLD_NEXT,"connect")
ip_char=serv_addr->sa_data
ip_char+=2
//192.168.2.3 找到了
if ((*ip_char==192)&&(*(ip_char+1)==168)&&(*(ip_char+2)==2)&&(*(ip_char+3)==3)) {
//简单返回一个权限错误的代码
return EACCES
}
// 调用真正的connect方法
return connect_linuxc(sockfd,serv_addr,addrlen)
}
编译成so文件
$ gcc -o lp_demo.so -shared lp_demo.c -ldl
测试文件 test.php
<?php
file_get_contents("")
?>
使用方法
LD_PRELOAD=lp_demo.so php test.php
这样他将不可能访问的到192.168.2.3这种我们内部的网址。起到一个很好的沙盒作用。
除此之外我们还可以利用fwrite fopen等函数将php对文件系统的读写 *** 作转移到mencache,nosql之类的后端资源当中。
最后,即使我们已经深入了c库的内部,也不意味着我们走到了最底层,在c库下面,还有一堆sys_开头的函数,他们才是内核空间里的真正函数,在此就不在探讨了。
没有太大的区别,只要不涉及系统内核的 *** 作和字符编码
的问题,可以说没有差别。还有一点反而是要考虑
web服务器
的差别,IIS和Apache或者其他的服务器的差别比Windows和Linux之间的差别更值得
php程序员
的关注。
Linux后台?你指的是Linux底层开发,还是Linux服务端程序开发?PHP是一个Web服务器脚本语言,因其本身的设计理念和限制,基本上就是专门用来做网站的。
如果是想做Linux内核底层开发的话当然是学C/C++,或者Python这类解释性语言也可以做不少事情。
Python使用DJango库也可用于Web网站开发
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)