`
王之子
  • 浏览: 109396 次
  • 性别: 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 应用属于流套接字范畴,数据报套接字和原始套接字涉及比较底层的协议知识。

分享到:
评论

相关推荐

    Python-游戏协议数据抓取解析工具

    本文将深入探讨一个基于Python的游戏协议数据抓取解析工具,该工具利用了wxWidgets、pywin32和WinPcap库来实现其功能。让我们逐一了解这些关键组件。 首先,`wxWidgets` 是一个跨平台的GUI工具包,用于帮助开发者...

    在winsows下使用pcap抓取http数据的exe小程序

    以前参与过pcap监控网络数据,回顾了下,使用pcap抓取一下http数据。 这个程序只能抓取http,而不能抓取https的数据,这是没办法的事情,所以用在开发调试比较合适。 不适用raw socket,因为在windows需要高级权限。...

    抓封包C++原程序.zip_c++封包_socket抓包程序_封包_抓包_抓封包

    这个程序可能使用原始socket(raw socket)来抓取网络层的数据,这样可以直接访问到IP头和传输层头(如TCP或UDP头),从而获取更底层的网络信息。 封包抓取库,如libpcap,提供了一种更高级的接口来捕获网络流量,...

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

    本文将详细探讨如何使用`raw_socket`在双网口环境中进行数据抓取与转发,主要涉及以下几个核心知识点: 1. **raw_socket**: `raw_socket`是操作系统提供的一个低级网络编程接口,允许程序员直接操作网络协议栈的...

    通过java socket实现屏幕网络监控

    此外,可能还需要使用多线程来处理图像的抓取、编码和发送,以避免阻塞用户界面。 为了优化性能,可以考虑使用压缩算法来减少数据传输量,例如使用GZIP或者ZLIB库来压缩字节流。另外,可以设定合理的更新频率,以...

    RawSend_RawSocket基于MAC发送_sock_raw_C++_原始Socket发送_

    在本主题中,“RawSend_RawSocket基于MAC发送_sock_raw_C++_原始Socket发送_”指的是使用C++语言通过原始套接字(Raw Socket)向指定MAC地址发送以太网数据帧的过程。以下将详细介绍这一技术及其相关知识点。 1. **...

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

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

    发那科机器人与视觉socket通讯

    总结起来,"发那科机器人与视觉socket通讯"涉及到的技术点包括视觉系统集成、Socket通讯原理、FANUC机器人编程、寄存器变量的读写以及IO信号的使用,通过这些技术,实现了机器人与视觉系统间的高效协同工作。

    FANUC机器人与康耐视智能相机Socket标准通信协议介绍.pdf

    这种通信模式依赖于FANUC机器人的User Socket Msg(R648)功能,而如果是在北美地区使用的FRA/FAC型号机器人,还需要额外安装KAREL(R632)软件来支持通讯。 在硬件准备方面,FANUC机器人和康耐视智能相机都需要...

    VC编程之socket

    本篇文章将深入探讨如何使用Visual C++(简称VC)进行Socket编程,特别是涉及如何实现屏幕抓取并进行传输的功能。 首先,让我们了解什么是Socket。Socket是网络通信的一种接口,它允许两个或多个应用程序通过网络...

    mac socket 调试抓包工具

    SSokit.dmg

    牛逼抓包工具 Socket通讯抓包

    Socket通讯抓包是一种重要的网络调试技术,主要用于监测和分析网络数据传输的过程。在标题和描述中提到的“牛逼抓包工具”显然是一款专注于Socket通信的抓包软件,它能够帮助开发者和网络管理员查看和理解Socket...

    抓取网页源代码

    在完成数据接收后,记得关闭socket,使用`closesocket()`函数,然后调用`WSACleanup()`来清理Winsock库。 在"webcatch1"这个文件中,很可能包含了实现上述步骤的C++源代码,可能包括定义socket,构建请求,发送和...

    简明Socket编程指南

    - **TCP和IP通信程序设计实验**:通过实现简单的客户端与服务器通信来展示如何使用Socket进行网络数据传输。 - **实时声音传输实验**:探讨如何通过网络实现实时音频流传输,这对于开发语音聊天应用程序至关重要。 -...

    发送和获取原始SOCKET数据

    标题中的“发送和获取原始SOCKET数据”是指利用计算机网络编程中的原始套接字(Raw Socket)技术,通过操作系统提供的接口来直接操作网络协议栈,从而实现对网络数据的发送和接收。原始套接字允许程序员绕过通常的...

    屏幕抓取及图像传输 采用zlib压缩算法

    这里我们关注的是一个采用zlib压缩算法的特定实现,它涉及到客户端服务器架构,屏幕抓取,图像数据的Socket传输以及zlib压缩与解压。 首先,让我们深入理解屏幕抓取。屏幕抓取,也称为屏幕捕获或截图,是指获取...

    UR机械臂与PC通讯程序(socket)

    UR机械臂与PC之间通过Socket通信实现数据交换,主要用于控制机械臂的动作及获取其当前位置信息。该过程涉及硬件配置、软件编程等多方面内容。 ### 二、硬件准备 #### 1. 使用的设备 - **UR5机械臂**:具有六个自由...

    UR经典机器人程序范围,包括与视觉socket通讯

    在这个压缩包中,我们重点讨论的是UR机器人与视觉系统的Socket通讯,这是一种通过网络进行数据交换的方式,常用于实现机器人与视觉系统之间的高效通信。 首先,让我们深入理解UR机器人的编程环境。UR的编程语言称为...

    大智慧数据读取

    此外,如果需要实时获取大智慧的行情数据,还可以研究其网络通信协议,利用`requests`或`socket`库建立网络连接,抓取实时数据。但这种方法通常较为复杂,需要对网络编程有一定了解。 总之,读取大智慧数据涉及文件...

    ip数据包抓取,分析ip数据报格式

    本主题将深入探讨如何使用C语言来抓取和分析IP数据报的格式。首先,我们来理解IP数据包的基本结构。 IP数据包由两部分组成:头部和数据部分。头部通常包含20到60字节的信息,而数据部分则承载上层协议(如TCP、UDP...

Global site tag (gtag.js) - Google Analytics