`
王之子
  • 浏览: 105590 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用 Socket 抓取数据

 
阅读更多

要在客户端操作 Socket ,可使用 fsockopen、socket_create、stream_socket_client 等函数实现。如果是PHP 5,建议使用 stream_socket。

 

fsockopen 实现长连接。Client 方与 Server 方先建立通信连接,连接建立后不断开,然后再进行报文发送和接收。

 

使用 Socket 获取数据的实现,GET 方法。

 

<?php
$fp = fsockopen("www.guaten.com",80, $errno, $errstr, 10) or die("$errstr ($errno)<br />\n");   
$out = "GET / HTTP/1.1\r\n";   
$out .= "Host: www.guaten.com\r\n";   
$out .= "Connection: Close\r\n\r\n";   

fwrite($fp, $out);   
while (!feof($fp)) {   
	echo fgets($fp, 128);   
}   
fclose($fp);   
?>

 

使用 Socket 获取数据的实现,POST 方法。

 

<?php
$post = ['username' => '15521071089','password' => 123456,'captcha' => 'CT4Y','act' => 'act_login'];
$data = http_build_query($post);
$fp = fsockopen("www.guaten.com",80, $errno, $errstr, 10) or die("$errstr ($errno)<br />\n");   

$out = "POST http://www.guaten.com/user.php HTTP/1.1\r\n";   
$out .= "Host: www.guaten.com\r\n";   
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\n";   
$out .= "Content-Type: application/x-www-form-urlencoded\r\n";
$out .= "Content-Length: ".strlen($data)."\r\n";
$out .= "Referer: http://www.guaten.com/user.php?act=login\r\n";
$out .= "Connection: Close\r\n\r\n";   
$out .= $data."\r\n\r\n";

fwrite($fp, $out);   
while (!feof($fp)) {   
	echo fgets($fp, 1280);   
}   
fclose($fp);   
?>

 

Web 应用程序是无法区分机器和人的,人和机器都是通过 Socket 提交数据,只不过人是通过浏览器调用操作系统的 Socket 提交,而机器人是通过自己写代码调用 Socket 提交。

 

最后,注意以下几点:

  • fsockopen 的第一个参数 $hostname 不要带“http://”字符串,除非使用 SSL 等。
  • Headers 请求不一定都要按照抓包数据全部带上,除非调试不成功或者不熟练或者有特殊请求可以全部照搬,否则只带上几个核心的 headers 。
  • 在 Connection 和 data 后有两个换行。
  • 有些表单可能有 hidden 值务必仔细抓包
  • 注意编码问题

前面说过,建议使用 stream_socket 实现。若使用 stream_socket  实现只改一行代码就行,如下:

 

$fp = stream_socket_client("tcp://www.guaten.com:80", $errno, $errstr, 3);

 

在 PHP 中,99.9% 的 Socket 应用属于流套接字范畴,数据报套接字和原始套接字涉及比较底层的协议知识。

分享到:
评论

相关推荐

    使用raw_socket进行双网口数据转发

    使用raw_socket进行对一个网卡的数据抓取,再对数据修改,将数据从另外一个网口发送出去,实现数据的抓取转发

    mac socket 调试抓包工具

    SSokit.dmg

    nfqueue-tcpip-socket.rar

    1、文件夹nfqueue-tcpip中实现数据抓取-修改-发送的工作,只需要在linux环境下使用 make 即可生成对应的可执行程序,需要以root权限去执行 2、文件夹socket-tcp中实现socket的tcp客户端和服务端的代码,只需在linux...

    通讯z中断分析数据抓取

    这种现象,其实本质上来说不是丢包,也不是丢数据,只是因为程序处理有错误,导致有些数据没有成功地被socket发送出去。 TCP粘包和拆包问题。假设客户端分别发送数据包D1和D2给服务端,由于服务端一次性读取到的字节...

    Spark Streaming与OpenCV传感器数据实时获取.zip

    #Client client使用OpenCV抓取摄像头数据,按照一定的时间,捕捉每帧图像,将图像数据重新编码后按照JSON格式通过kafka发送到Server上 #Server Spark Streaming实时接收来自kafka的多客户端的图像数据,并对数据做...

    wireshare抓取本地进程间通信数据包

    步骤/原理详细 绝对可以实现抓包,保证不像某些人只写个步骤最后不管...最后把抓取包图奉上 最后提供客户与服务器的代码保证一定学会设置 通过设置让WIRESAHRE可以抓取本地进程不用在别人的机子在自己机子上就可以实现

    Spark Streaming与OpenCV传感器数据实时获取

    #Client client使用OpenCV抓取摄像头数据,按照一定的时间,捕捉每帧图像,将图像数据重新编码后按照JSON格式通过kafka发送到Server上 Spark Streaming实时接收来自kafka的多客户端的图像数据,并对数据做以下处理...

    Scraping-Weather-Station-Data:使用 Node、Angular、Leaflet 抓取爱尔兰天气数据

    抓取爱尔兰天气数据 为什么? 我找不到可以从全国众多气象站检索当前天气数据的 API。 包含一个包含大约每小时更新一次的气象站数据的表格。 应用功能 我在和的帮助下从了气象站数据。 Node 服务器每隔一段时间...

    C#使用TCP/UDP协议通信并用Wireshark抓包分析数据

    进行通信,使用Wireshark抓包软件抓取发送的包并分析数据结构,由于涉及到客户端和通信端,可以使用两台电脑,一台电脑编写客户端代码,一台电脑编写服务器端代码,也可以在一台电脑上开两个 VS2019同时编译两个端,...

    Socket调试工具集

    HttpWatch 一款强大的网页数据分析工具 SocketTool调试软件是一款网络TCP/UDP通信调试工具 SockMon 完成了对WindowsSocket一系列重要API的监视与调试。 SoftXHTTPDebugger 抓取,分析和调试所有的HTTP通信信息(客户...

    易语言-使用 RawSocket 捕获网卡/指定程序/指定端口/指定IP 数据包

    本文章将介绍如何使用RawSocket(原始套接字)开发网络嗅探器: 首先我们得了解什么是套接字,这个我就不多说,自己百度,百度百科比我说的好。 那么什么又是原始套接字呢,常用的套接字分为 SOCK_STREAM(流套接字) ...

    SOCKET协议使用二进制byte转对象的数据 (HP-SOCKET网络通讯框架与C#系列之二)-附件资源

    SOCKET协议使用二进制byte转对象的数据 (HP-SOCKET网络通讯框架与C#系列之二)-附件资源

    tld算法matlab代码-ScrapingData:抓取数据的学习途径

    这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库(基于pycurl)。 pycurl – 网络库(绑定libcurl)。 urllib3 – Python HTTP库,安全连接池、...

    基于JAVA实现的CS远程监控系统软件

    客户端服务端架构: 使用Socket编程实现客户端和服务端之间的通信和数据传输。 图形界面设计: 使用Swing或JavaFX等图形界面库设计用户友好的监控界面。 屏幕抓取技术: 使用Java图像处理库实现将远程计算机屏幕内容...

    Python是一种功能强大且广泛使用的编程语言,它在多个领域都发挥着重要作用 以下是对Python资源的500字介绍: Pyt

    在爬虫开发领域,Python的Scrapy、Beautiful Soup等库可以帮助开发者轻松地从网站上抓取数据。 除了上述应用领域外,Python还在数据分析、人工智能等领域发挥着重要作用。Python的数据分析库Pandas提供了丰富的数据...

    利用python-pypcap抓取带VLAN标签的数据包方法

    而libpcap虽然是基于socket实现抓包,但在收到数据包后,会进一步恢复出剥离的VLAN信息,能够满足需要抓取带VLAN标签信息的数据包的需求场景。 python-pypcap包是对libpcap库的python语言封装,本文主要介绍如果利用...

    php抓取页面与代码解析 推荐

    得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。下面先简单说一下本文的主要内容: 一、 PHP抓取页面的主要方法: 1. file&#40;&#41;函数 2. file_get_contents&#...

    局域网网络抓包 vc++ 源码

    用于在本局域网内部抓包,能够打印显示出文件的包头信息,程序简单 60行 适合初学者

    NetSpider vb

    网页抓取数据后,数据将存到NetSpider\bin\SaveHtml\目录下,NetSpider\bin\SaveHtml\Src\存放相应的缓存数据。 自动登陆时,程序将在NetSpider\bin\LoginScript\Script.txt文件检索和监控视窗地址匹配的脚本操作...

    php中使用Curl、socket、file_get_contents三种方法POST提交数据

    抓取远程内容,之前一直都在用file_get_content函数,其实早就知道有curl这么一个好东西的存在,但是看了一眼后感觉使用颇有些复杂,没有file_get_content那么简单,再就是需求也不大,所以没有学习使用curl。...

Global site tag (gtag.js) - Google Analytics