我的Ubuntu虛擬機的IP地址是192.168.1.110。其他一切都很好。我不知道代碼有什麼問題。也許我正在使用錯誤的包頭結構? 下面是我的代碼和輸出。我的主機IP應該是192.168.1.110,現在的端口肯定是錯誤的。從libpcap捕獲的數據包中獲取錯誤的ip和端口號
sudo ./sniffall 0
84.72.137.105:38055 192.168.1.105:56652
192.168.1.105:56652 174.141.213.124:28073
84.72.137.105:38055 192.168.1.105:56652
192.168.1.105:56652 174.141.213.124:28073
84.72.137.105:38055 192.168.1.105:56652
#include <pcap.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netinet/if_ether.h>
#include <netinet/ether.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
void getPacket(u_char *args, const struct pcap_pkthdr *pkthdr, const u_char *packet){
struct ip *ip;
struct tcphdr *tcp;
ip = (struct ip*)(packet+sizeof(struct ether_header));
tcp = (struct tcphdr*)(packet+sizeof(struct ether_header)+sizeof(struct ip));
char* src = inet_ntoa(ip->ip_src);
printf("%s:%d ",src,tcp->source);
char* dst = inet_ntoa(ip->ip_dst);
printf(" %s:%d\n", dst, tcp->dest);
}
int main(int argc, char *argv[]){
char errbuf[PCAP_ERRBUF_SIZE], *device;
device = argv[1];
pcap_t *handle;
handle = pcap_open_live(device, BUFSIZ, 1, 1000, errbuf);
if(!handle){
device = pcap_lookupdev(errbuf);
handle = pcap_open_live(device, BUFSIZ, 1, 1000, errbuf);
if(!handle){
printf("Couldn't open device %s: %s\n", device, errbuf);
}
}
pcap_loop(handle, 5, getPacket, NULL);
return 0;
}
您正在打開混雜模式下的pcap手柄。也許你看到電線上的其他交通? – pilcrow
這看起來不像你程序的輸出。它不是打印':'後面跟着端口號。您還應該使用'ntohs'將端口號從網絡轉換爲主機字節順序。 – Barmar
你有一大塊代碼被註釋掉了。如果不需要的話,那對於試圖幫助回答你的問題的人來說只是噪音:-)只是一個友好的筆記! – corsiKa