对于几年前的计算机科学信息战类,我编写了一个python脚本,运行libpcap混杂数据包捕获文件来解析Facebook聊天流量(以明文形式传递的earlang元组),并认为一个有趣的项目是移植程序到Android.
我想用Java重写它,但无法直接在手机上找到有关数据包捕获的任何信息.
我正在尝试使用ctypes在python3中使用libpcap.
在C中给出以下功能
pcap_lookupnet(dev, &net, &mask, errbuf)
Run Code Online (Sandbox Code Playgroud)
在python我有以下内容
pcap_lookupnet = pcap.pcap_lookupnet
mask = ctypes.c_uint32
net = ctypes.c_int32
if(pcap_lookupnet(dev,net,mask,errbuf) == -1):
print("Error could not get netmask for device {0}".format(errbuf))
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
File "./libpcap.py", line 63, in <module>
if(pcap_lookupnet(dev,net,mask,errbuf) == -1):
ctypes.ArgumentError: argument 2: <class 'TypeError'>: Don't know how to convert parameter 2
Run Code Online (Sandbox Code Playgroud)
你如何应对&blah价值观?
我正在使用Fedora 17,我想用libpcap编程.问题是我的计算机没有找到pcap.h,因为我安装了libpcap和libpcap-devel,这真的很奇怪.还有wireshark和snort在我的工作站工作,我相信使用该库.所以当我用...编译我的代码时
#include <pcap.h>
... Code
Run Code Online (Sandbox Code Playgroud)
并使用gcc my_file.c -lpcap,我得到编译器错误,说...找不到pcap.h. 奇怪的是,我在/ libraries /目录中看到了我的libpcap.so文件.我弄完了 ..
yum install libpcap和yum install libpcap-devel
我不知道为什么Fedora会对我这样做.
谢谢你的帮助!
我得到ValueError:下面的代码无效tcpdump标头错误.任何帮助赞赏
import dpkt
f = open('a.pcap')
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
tcp = ip.data
if tcp.dport == 80 and len(tcp.data) > 0:
http = dpkt.http.Request(tcp.data)
print http.uri
f.close()
Run Code Online (Sandbox Code Playgroud)
错误如下所示
Traceback (most recent call last):
File "malcap.py", line 6, in <module>
pcap = dpkt.pcap.Reader(f)
File "/usr/lib/python2.7/site-packages/dpkt/pcap.py", line 104, in __init__
raise ValueError, 'invalid tcpdump header'
ValueError: invalid tcpdump header
Run Code Online (Sandbox Code Playgroud) 不使用libpcap我试图写一个符合pcap文件格式(格式)的日志文件.WireShark需要读取此文件.到目前为止,我用C++编写了这个:
struct pcapFileHeader {
uint32_t magic_number; /* magic number */
uint16_t version_major; /* major version number */
uint16_t version_minor; /* minor version number */
int16_t thiszone; /* GMT to local correction */
uint32_t sigfigs; /* accuracy of timestamps */
uint32_t snaplen; /* max length of captured packets, in octets */
uint32_t network; /* data link type */
};
ofstream fileout;
fileout.open("file.pcap", ios::trunc);
pcapFileHeader fileHeader;
fileHeader.magic_number = 0xa1b2c3d4;
fileHeader.version_major = 2;
fileHeader.version_minor = 4;
fileHeader.thiszone = 0;
fileHeader.sigfigs = …Run Code Online (Sandbox Code Playgroud) 在运行下面的代码时,其中一个CPU核心达到100%的使用率.有无交通.怎么了?
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
void my_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char*
packet)
{
//nothing, nothing at all...
//printf("+");
}
int main(int argc,char **argv)
{
int i;
char *dev;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t* descr;
const u_char *packet;
struct bpf_program fp; /* hold compiled program */
bpf_u_int32 maskp; /* subnet mask */
bpf_u_int32 netp; /* ip */
if(argc != 2){
fprintf(stdout, "Usage: %s \"expression\"\n"
,argv[0]);
return 0;
}
/* Now get a device */
dev …Run Code Online (Sandbox Code Playgroud) 我想要一个接口出站流量的源 IP 地址列表。如何使用 libpcap 找到数据包的方向(无论是入站还是出站读取流量)?我不知道双方的子网信息。而且两边都有客户端/服务器,所以我不能依赖端口号范围来过滤流量。
为什么 libpcap 数据包头中没有有关方向的信息,或者像pcap-filterinbound中那样的过滤器选项?
对pcap文件运行file命令将打印出以下内容:
$ file pcap.pcap
pcap.pcap: tcpdump capture file (little-endian) - version 2.4 ....
Run Code Online (Sandbox Code Playgroud)
我一直在寻找一种方法来创建一个big-endian捕获文件,或者在线下载一个样本,但无济于事.
我也很困惑pcap中究竟是小端还是大端.据我所知,libpcap捕获了它在线上看到的内容.
我想使用libpcap来捕获IP数据包,我想解析IP头和tcp头.`
有IP头和TCP头结构<netinet/ip.h>,<netinet/tcp.h>
IP头相对更容易解析,但对于TCP头,由于有tcp选项,常见的选项是MSS,SACK(选择性确认),时间戳,窗口缩放和NOP.
我想要一个函数parse_pkt():
struct tcphdr tcp_hdr;
struct ip ip_hdr;
parse_pkt(u_char *pcap_packet, struct ip* p_ip, struct tcp* p_tcp);
Run Code Online (Sandbox Code Playgroud)
所以在调用函数后,如果我想知道源IP地址,序列号和MSS,
scr_ip = ip_hdr.src_ip
seq = tcp_hdr.seq
mss = tcp_hdr.mss
Run Code Online (Sandbox Code Playgroud)
有没有类似的源代码/片段可以满足我的要求?谢谢!
我想计算从发送数据包到恢复ACK之间的时间差.我没有在数据包中看到任何与时间戳相关的信息,任何人都可以给我任何关于如何计算差异的指示.