linux - hasil tangkapan paket libpcap tidak lengkap?
伊谢尔伦
伊谢尔伦 2017-05-16 13:24:16
0
1
653

Menggunakan libpcap untuk menangkap paket di bawah ubuntu14.04, saya ingin mendapatkan sekeping html yang dihantar menggunakan http, tetapi keputusan yang diperolehi tidak konsisten dengan data yang diperoleh oleh wireshark dalam situasi yang sama.

Kod semasa adalah seperti berikut:

#include <pcap.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <string.h>
#include <netinet/in.h>

void getPacket(u_char * arg, const struct pcap_pkthdr * pkthdr, const u_char * packet)
{

    bpf_u_int32 caplen = pkthdr->caplen;
    bpf_u_int32 len = pkthdr->len;

    int * id = (int *)arg;

    struct iphdr *ip_header = (struct iphdr *)(packet + ETH_HLEN);
    struct tcphdr *tcp_header = (struct tcphdr *)(packet + ETH_HLEN + sizeof(struct iphdr));

    const u_char *tcp_data = packet + ETH_HLEN + sizeof(struct iphdr) + sizeof(struct tcphdr);

    printf("%s\n\n", tcp_data);
}

int main()
{
    char errBuf[PCAP_ERRBUF_SIZE];
    pcap_t * device = pcap_open_live("wlan0", 65535, 1, 0, errBuf);

    if(!device)
    {
        printf("错误: pcap_open_live(): %s\n", errBuf);
        exit(1);
    }

    struct bpf_program filter;
    pcap_compile(device, &filter, "tcp port 80 and host 123.206.7.47", 1, 0);
    pcap_setfilter(device, &filter);

    int id = 0;

    pcap_loop(device, -1, getPacket, (u_char*)&id);
    pcap_close(device);

    return 0;
}

Pelayan mempunyai html mudah Apabila saya menggunakan pelayar untuk mengakses pelayan http://123.206.7.47/test.html, wireshark (sama seperti bpf) menangkap 10 paket seperti ini:

Program saya kelihatan seperti ini apabila menggunakan penyahpepijat Gambar ini sepadan dengan paket keempat (saiz 474) dalam gambar di atas:

Mengapa paket char * yang tidak ditandatangani kelihatan urutan yang tidak lengkap? Dan mengapa tcp_data sangat pendek?

Adakah terdapat beberapa konfigurasi libpcap yang hilang dalam kod saya atau adakah ia disebabkan oleh sebab lain?

Satu lagi perkara yang perlu ditambah ialah apabila saya melawat tapak web lain, saya kadang-kadang boleh menangkap permintaan HTTP yang lengkap, tetapi tidak pada halaman web yang saya lawati.

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(1)
为情所困

Sudah diselesaikan. Hanya tekan caplen untuk membaca char, printf("%s")输出不全似乎是因为某个二进制数据是

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!