我正在使用pcap库,但我不知道为什么我总是得到这个输出:
大小的新数据包:udata = 8 hdr = 8 pkt = 8
这是代码:
void handle_pcap(u_char *udata, const struct pcap_pkthdr *hdr, const u_char *pkt)
{
DEBUG("DANY new packet with size: udata= %d hdr=%d pkt=%d", (int) sizeof(udata),(int) sizeof(hdr),(int) sizeof(pkt) );
...
stuff
}
Run Code Online (Sandbox Code Playgroud)
在我使用的另一个文件中:
status = pcap_loop (pcap_obj,
-1 /* How many packets it should sniff for before returning (a negative value
means it should sniff until an error occurs (loop forever) ) */,
handle_pcap /* Callback that will be called*/,
NULL /* Arguments …Run Code Online (Sandbox Code Playgroud) 我正在用C编写无线数据包嗅探器程序.我已经使用airmon-ng将我的无线接口设置为监控模式,现在我正在嗅探"mon0"接口.我正在使用linux(ubuntu 10.10).
我想将MAC地址设置为数据包的过滤器.我已经完成了如下所示,但它说"mon0没有分配IPV4地址"
pcap_lookupnet(dev,&net,&mask,errbuf);
printf("%s\n",errbuf);
/* Open the session in promiscuous mode */
handle = pcap_open_live(dev, BUFSIZ, 1, 1000, errbuf);
if (handle == NULL) {
printf("Couldn't open device %s: %s\n", dev, errbuf);
return 2;
}
if(pcap_compile(handle,&fp,argv[0],0,net)==-1){
fprintf(stderr,"Error calling pcap_compile\n");exit(1);}
if(pcap_setfilter(handle,&fp) == -1){
fprintf(stderr,"Error setting filter\n");exit(1);}
/* The call pcap_loop() and pass our callback function */
pcap_loop(handle, 10, my_callback, NULL);
Run Code Online (Sandbox Code Playgroud)
请帮帮我,我怎样才能设置过滤MAC地址?
我希望能够在tcp客户端的tcp流中拦截/修改数据.pcap的示例显示了如何解析tcp包头/有效负载.但是假设,我想在tcp客户端读取之前修改数据包有效负载,或者完全丢弃数据包.我怎么能用pcap capure做到这一点?
我正在做一个任务,我必须解析一个 pcap 文件,我正在使用 dpkt 来做到这一点。我是网络新手,所以我很难调试代码/入门。
第一组代码:
import dpkt
filename='test.pcap'
f = open(filename)
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
tcp = ip.data
f.close()
Run Code Online (Sandbox Code Playgroud)
错误是 AttributeError: 'str' 对象没有属性 'data'
因此,从之前的 Stackoverflow 中,我发现也许我应该“跳过 dpkt 以太网解码并直接跳转到 IP 解码”,因此我更改了代码并转到:
import dpkt
filename='test.pcap'
f = open(filename)
pcap = dpkt.pcap.Reader(f)
for ts,buf in pcap:
ip = dpkt.ip.IP(buf)
tcp = ip.data
f.close()
Run Code Online (Sandbox Code Playgroud)
它现在给我的错误是“UnpackError: invalid header length”
不太明白如何继续前进,任何帮助将不胜感激
基本上我想要一个简单的C代码,它说明了在混杂模式下捕获数据包并从中提取出ssid.
EDIT1
我正在编写我编写的代码来执行基本的嗅探.
#include <stdio.h>
#include <pcap.h>
int main(int argc, char *argv[]){
pcap_t *handle;
struct pcap_pkthdr header;
const u_char *packet;
int i;
char *dev, errbuf[PCAP_ERRBUF_SIZE];
// dev = pcap_lookupdev(errbuf);
dev = argv[1];
if( dev == NULL ){
fprintf(stderr, "Couldn't find default device\n");
return 0;
}
printf("Device: %s\n", dev);
handle = pcap_open_live( dev , BUFSIZ , 0 , 1000 , errbuf);
if( handle == NULL ){
fprintf(stderr , "couldn't open device %s: %s\n" , dev , errbuf);
return 0;
}
else{ …Run Code Online (Sandbox Code Playgroud)