찾다
php教程php手册PHP-SOCKETS初步编程
PHP-SOCKETS初步编程Jun 13, 2016 am 10:19 AM
msn작가공부하다프로그램 작성

作者:darkness[bst]

msn:cqxy[at]21cn.net

学习php2个月了,收获挺多.但是与别人不同的是,我更喜欢socket.php在socket这方面的文章太少了.所以决定写一系列php-socket读书笔记.一直从最基本写到socket_raw.
实例+心得.实例将会有端口转发(突破防火墙),动网类型exp,端口扫描,php后门,发包型exp框架.由于学习缘故,每周只能写一篇.现给出卷一.希望大家一起投入到php shell编程中来.


前言:

php是世界上最流行的脚本语言之一。一直以来它在web编程中得到极广泛的应用。我想说的是php不仅在web方面出色,在shell方面同样出色。只是人们更习惯用perl来编写shell脚本.这里申明一下,本人不是php高手,接触php不过几个星期,这只是一篇读书笔记。有错误的地方请提出来。也可以给我mail,共同探讨php。

前置知识:

php最吸引我的地方就是sockets 扩展,事实上我会简单的vb winsock,完全能用vb写一个常用的winsock程序出来。但是我还是选择了php。因为它是跨平台的。

php默认是不支持高级socket的,只支持被“封装”的fsockopen等几个函数。socket作为php的扩展,需要设置一下才能使其支持。在windows需要设置php。ini,在php。ini找;windows extensions这一行,去掉;extension=php_sockets.dll 前面的分号。that‘s ok。*nix下则需要在编译的时候加入-enable—sockets命令。在没有使用dl()函数的时候,你的php必须和在同一目录php_sockets.dll。好了,完成php socket配置了。

下面就是运行的问题了

在终端下运行php脚本很简单。windows下c:phpphp.exe ╟q test.php,*nix下要在php文件事先申明由php来执行,就像perl一样。像#!/usr/local/bin/php ╟q .,然后再来个./test.php。参数q的意思就是不输出php标头信息。

输入参数问题:

有的人说,php shell如何输入参数。在web的时候可以这样输入参数http://xxx.com/aa.php?参数1=xxxx&参数2=ssssss。没关系php同perl一样,具有相似的参数功能。来看官方的描述

“argv”

传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序 c 语言样式的命令行参数。当调用 get 方法时,该变量包含请求的数据。

“argc”

包含传递给程序的命令行参数的个数(如果运行在命令行模式)。



呵呵,简单的说。看我举个例子



以下是代码:

[ctrl+a 全部选择]


我想你应该看懂了哦,这里argc[0]是指的程序本身。也可以这样来.

print(%s,$argv[1]);
 

花中午在网吧的1个小时写下这一小段


前面一段谈到命令行方式的运行。更多请参照
http://www.php.net/manual/zh/features.commandline.php


1.fopen的应用
fopen也可以被称作被封装的socket函数。不仅用于文件读写,还可以用于socket。fopen相当于其他高级语言的inet控件/类,较于fsockopen,他对于url的操作更高级。

fopen的使用方法
$s = fopen ($url, mode);
fopen的mode属性:
mode 说明
r 只读方式打开,将文件指针指向文件头。
r+ 读写方式打开,将文件指针指向文件头。
w 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
w+ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
a+ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
x 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 false,并生成一条 e_warning 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 o_excl|o_creat 标记是等价的。此选项被 php 4.3.2 以及以后的版本所支持,仅能用于本地文件。
x+ 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 false,并生成一条 e_warning 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 o_excl|o_creat 标记是等价的。此选项被 php 4.3.2 以及以后的版本所支持,仅能用于本地文件。


即用于本地文件的操作,也可以用于inet。是不是很kool?
假如要测试一个站的iis目录是不是有写权限。
可以这样写
$s = fopen("http://www.bugkidz.org","x+") or die(“不存在写权限”)
如果存在的话,你可以继续构造下面的语句。用fwrite 远程写入文件。
但是一般的网站都是只读权限的
$s =fopen("http://www.bugkidz.org/index.php?id=1","r");
这样就读入了http://www.bugkidz.org/index.php?id=1的内容,但是还得经过处理才能获取完整的文件内容
这样
while (!feof($s)) {
echo fgets($s, 1024);
}
我认为fopen用于sql injection是最方便不过的了。
function phpinet($url)
{
fopen($url,"r") or die("打开url错误");


while (!feof($s)) {
$cahe = fgets($s, 1024);
}

retrun $cahe;
fclose($s)
}


这段函数等同于vb中的inet.openurl
fsockopen族函数的使用
fsockopen也是被封装的一类socket函数.有点类似于VB中的winsock控件.令人遗憾的是它支持主动socket连接,不支持bind,listen等,如果需要实现这些功能,则要使用PHP中的高级socket编程.即便是这样,fsockopen函数也能满足大多数的需求.
这样使用fsockopen
resource fsockopen ( string target, int port [, int errno [, string errstr [, float timeout]]])

例子:
$sock = fsockopen("192.168.0.1",80,$errno,$errstr,30);
前面2个是地址和端口,中间2个是有关错误的变量,最后就是timeout设置了.
通常$sock = fsockopen("192.168.0.1",80);这样即可.
$sock = fsockopen("192.168.0.1",80);这是典型的TCP连接.UDP连接这样来
$sock = fsockopen("udp://192.168.0.1",53);
用这个来写一个TFTP的客户端也是可以的.

fsockopen的应用实例:

实例一,简单的HTTP会话.

代码


以下是代码:

[ctrl+a 全部选择]

流程一般是这样的
建立fsockopen 资源,定义发送内容,用fwrite函数或者fputs函数写入定义内容,一行一行的输出得到的内容,直到到达文件末尾,fgets函数或者是fread使用.使用fclose关闭建立的fsockopen 资源.
ANGEL写了一个PHP的端口扫描工具,贴出之
http://www.4ngel.net/article/20.htm

选择fsockopen 来写简单EXP发送框架绝对是个goodidea.becoz its so easy.
看我的PHP上传漏洞的exp.

代码


以下是代码:

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
计算机编程中常见的if语句是什么计算机编程中常见的if语句是什么Jan 29, 2023 pm 04:31 PM

计算机编程中常见的if语句是条件判断语句。if语句是一种选择分支结构,它是依据明确的条件选择选择执行路径,而不是严格按照顺序执行,在编程实际运用中要根据程序流程选择适合的分支语句,它是依照条件的结果改变执行的程序;if语句的简单语法“if(条件表达式){// 要执行的代码;}”。

Python编程:详解命名元组(namedtuple)的使用要点Python编程:详解命名元组(namedtuple)的使用要点Apr 11, 2023 pm 09:22 PM

前言本文继续来介绍Python集合模块,这次主要简明扼要的介绍其内的命名元组,即namedtuple的使用。闲话少叙,我们开始——记得点赞、关注和转发哦~ ^_^创建命名元组Python集合中的命名元组类namedTuples为元组中的每个位置赋予意义,并增强代码的可读性和描述性。它们可以在任何使用常规元组的地方使用,且增加了通过名称而不是位置索引方式访问字段的能力。其来自Python内置模块collections。其使用的常规语法方式为:import collections XxNamedT

PHP8.0中的邮件库PHP8.0中的邮件库May 14, 2023 am 08:49 AM

最近,PHP8.0发布了一个新的邮件库,使得在PHP中发送和接收电子邮件变得更加容易。这个库具有强大的功能,包括构建电子邮件,发送电子邮件,解析电子邮件,获取附件和解决电子邮件获得卡住的问题。在很多项目中,我们都需要使用电子邮件来进行通信和一些必备的业务操作。而PHP8.0中的邮件库可以让我们轻松地实现这一点。接下来,我们将探索这个新的邮件库,并了解如何在我

如何在Go中进行图像处理?如何在Go中进行图像处理?May 11, 2023 pm 04:45 PM

作为一门高效的编程语言,Go在图像处理领域也有着不错的表现。虽然Go本身的标准库中没有提供专门的图像处理相关的API,但是有一些优秀的第三方库可以供我们使用,比如GoCV、ImageMagick和GraphicsMagick等。本文将重点介绍使用GoCV进行图像处理的方法。GoCV是一个高度依赖于OpenCV的Go语言绑定库,其

PHP8.0中的DOMDocumentPHP8.0中的DOMDocumentMay 14, 2023 am 08:18 AM

随着PHP8.0的发布,DOMDocument作为PHP内置的XML解析库,也有了新的变化和增强。DOMDocument在PHP中的重要性不言而喻,尤其在处理XML文档方面,它的功能十分强大,而且使用起来也十分简单。本文将介绍PHP8.0中DOMDocument的新特性和应用。一、DOMDocument概述DOM(DocumentObjectModel)

学Python,还不知道main函数吗学Python,还不知道main函数吗Apr 12, 2023 pm 02:58 PM

Python 中的 main 函数充当程序的执行点,在 Python 编程中定义 main 函数是启动程序执行的必要条件,不过它仅在程序直接运行时才执行,而在作为模块导入时不会执行。要了解有关 Python main 函数的更多信息,我们将从如下几点逐步学习:什么是 Python 函数Python 中 main 函数的功能是什么一个基本的 Python main() 是怎样的Python 执行模式Let’s get started什么是 Python 函数相信很多小伙伴对函数都不陌生了,函数是可

PHP8.0中的Symbol类型PHP8.0中的Symbol类型May 14, 2023 am 08:39 AM

PHP8.0是PHP语言的最新版本,自发布以来已经引发了广泛的关注和争议。其中,最引人瞩目的新特性之一就是Symbol类型。Symbol类型是PHP8.0中新增的一种数据类型,它类似于JavaScript中的Symbol类型,可用于表示独一无二的值。这意味着,两个Symbol类型的值即使完全相同,它们也是不相等的。Symbol类型的使用可以避免在不同的代码段

PHP8.0中的HTTP客户端库PHP8.0中的HTTP客户端库May 14, 2023 am 08:51 AM

PHP8.0中的HTTP客户端库PHP8.0的发布带来了很多新特性和改进,其中一个最引人注目的是内置的HTTP客户端库的加入。这个库提供了一个简单的方法来发送HTTP请求并处理返回的响应。在本文中,我们将探讨这个库的主要功能和用法。发送HTTP请求使用PHP8.0内置的HTTP客户端库发送HTTP请求非常简单。在本例中,我们将使用GET方法获取这个网站的首页

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전