使用Python嗅探网络数据包的最佳方法是什么?
我从几个地方听说,最好的模块是一个名为Scapy的模块,不幸的是,它使我的系统上的python.exe崩溃.我会认为这只是我安装它的一个问题,除了很多其他人告诉我它在Windows上运行效果不佳.(如果有人有兴趣,我正在运行Windows Vista,这可能会影响事情).
有谁知道更好的解决方案?
UPD:
在阅读了告诉我安装PyPcap的答案之后,我稍微搞砸了一下,发现我曾尝试使用的Scapy也告诉我安装PyPcap,除了它是一个修改版本供它使用.正是这个修改过的PyPcap导致了问题,显然,因为答案中的例子也导致了问题.
我安装了原始版本的PyPcap(来自谷歌的网站),而且Scapy开始工作正常(我没有尝试过很多东西,但至少它在我开始嗅探时没有崩溃).我向Scapy开发人员发送了一张新的缺陷票:http://trac.secdev.org/scapy/ticket/166 ,希望他们能用它做点什么.
无论如何,只是想我会让你们都知道.
我想以某种方式挂钩到本地系统的网络堆栈,以捕获传出的网络数据包而不使用Winpcap.不幸的是,它偶尔会使我的系统崩溃.
有没有办法从用.NET语言编写的用户空间进程"嗅探"本地系统的传出流量?
pcap_loop和pcap_dispatch之间究竟有什么区别?
我试图从我的root设备(4.4.4)捕获HTTPS流量,以分析应用程序的未记录协议.我已将我的Fiddler设置为代理并启用HTTPS嗅探.我在我的设备上安装了Fiddler生成的根证书.我在Android设备上为我的Wifi设置了代理.
当我运行浏览器并导航到任何HTTP或HTTPS站点时,Fiddler可以成功捕获流量.
当我运行一些应用程序(例如我自己的应用程序使用Parse作为其后端)时,我可以看到服务器的所有HTTPS流量,已解密.到现在为止还挺好.
当我尝试运行该特定应用程序时,我无法让Fiddler捕获其流量.以下是我对Fiddler的全部看法:
URL是一些IP地址:SSL(:443).
我也尝试过使用ProxyDroid.有趣的是,我能够捕获流量一次,看到解密的HTTPS连接到该应用程序的服务器,但在此之后,它再也没有捕获.我知道该应用程序使用HTTPS,而不是未知/其他协议.
如何成功捕获HTTPS流量,为什么Fiddler会为该应用程序工作,然后突然停止工作?
当我在Mac OS X上运行一个用C编码的简单数据包嗅探器时,我根本没有输出,这是一个奇怪的事情!有人可以帮我理解发生了什么.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void) {
int i, recv_length, sockfd;
u_char buffer[9000];
if ((sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)) == -1) {
printf("Socket failed!!\n");
return -1;
}
for(i=0; i < 3; i++) {
recv_length = recv(sockfd, buffer, 8000, 0);
printf("Got some bytes : %d\n", recv_length);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译它并在我的盒子上运行它没有任何进展:
MacOsxBox:Desktop evariste$sudo ./simpleSniffer
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在使用一个与我的COMM端口对话的程序,但是我已经创建了另一个程序,我想"嗅探"通信端口消息,并对这些消息执行它自己的操作.这在.NET c#中是否可行?
我试图通过使用tcpdump来嗅探http标头.
这个过滤器运行良好,但我无法理解 -
(((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了它,但我找不到任何有用的信息
这是整个tcpdump命令
sudo tcpdump -A 'dst [dest host] or src [src host] and tcp and
(((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -i eth0
Run Code Online (Sandbox Code Playgroud) 在我的网页上,我有这个CSS:
tr:hover {
background-color: #f0f;
}
Run Code Online (Sandbox Code Playgroud)
除了好的旧IE之外,它在所有浏览器中都能很好地工作.我知道我可以写一些jQuery来添加和删除鼠标上/下的一个类,但我不想让所有其他支持:hover
正确的浏览器出现问题- 所以我只想应用这个浏览器的JS行为本身不支持纯CSS解决方案.
当然,我们都知道这$.browser
已被弃用了,而且我们都知道浏览器嗅探是一件坏事,SO上的所有其他问题都有大量的答案,就像"你不应该检查浏览器,检查为特征 ",而这一切都很好,当这些人生活的神奇仙境,但我们其他人需要得到我们的网站工作,看着对面IE6和其他浏览器确定.
$.support
IE6和7看起来像这样:
leadingWhitespace: false
tbody: false
objectAll: false
htmlSerialize: false
style: false
hrefNormalized: false
opacity: false
cssFloat: false
scriptEval: false
noCloneEvent: false
boxModel: true
Run Code Online (Sandbox Code Playgroud)
我到底该如何使用这些属性来确定是否tr:hover
有效?
是的我知道在这个例子中,它是相当无害的,我可能可以通过不向IE用户提供该功能,或者通过在所有浏览器中模拟它来逃避,但这不是重点.$.browser
当你$.support
没有接近替换它时,你应该如何停止使用?
在阻止方式中,我可以这样做:
from scapy.all import *
sniff(filter"tcp and port 80", count=10, prn = labmda x:x.summary())
# Below code will be executed only after 10 packets have been received
do_stuff()
do_stuff2()
do_stuff3()
Run Code Online (Sandbox Code Playgroud)
我希望能够以非阻塞的方式用scapy嗅探数据包,如下所示:
def packet_recevied_event(p):
print "Packet received event!"
print p.summary()
# The "event_handler" parameter is my wishful thinking
sniff(filter"tcp and port 80", count=10, prn=labmda x:x.summary(),
event_handler=packet_received_event)
#I want this to be executed immediately
do_stuff()
do_stuff2()
do_stuff3()
Run Code Online (Sandbox Code Playgroud)
总结一下:我的问题非常清楚,我希望能够继续执行代码而不用阻止它的嗅探功能.一种选择是为此打开一个单独的线程,但我想避免它并尽可能使用scapy本机工具.
环境细节:
python:2.7
scapy:2.1.0
os:ubuntu 12.04 64bit
我只是四处寻找如何制作一个可以用Java嗅探网络流量的程序,但我找不到任何东西.我想知道是否有任何方法可以查看网络流量.我听说过一个Socket的想法,但是我不明白这是怎么回事.所以无论如何,只是寻找API或自己编写它的方法.
编辑: 我很乐意喜欢API,但我还想澄清使用Socket嗅探流量的方法.