首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法从用C语言收到的数据包中读取urls?

问有没有办法从用C语言收到的数据包中读取urls?
EN

Stack Overflow用户
提问于 2014-06-02 12:02:01
回答 1查看 82关注 0票数 0

我一直在使用lpcap,并成功地接收到进出我计算机的数据包。

但是,我只能获得这些包的源的HostName和IP地址,而不一定是与它们相关的URL。

例如,我将运行我的代码并看到一个源IP,然后谷歌例如我将看到74.125.226.163和lga15s45-in-f3.1e100.net,而不是google.com。

我一直在接收TCP数据包,并从IP报头信息中获取了先验信息。

我以前读过,HTTP报头中的AVP经常包含这些信息,但是我不知道如何从TCP信息中获得这些HTTP报头,或者是否有使用lpcap的方法。

最重要的是,有没有办法读取我的数据包来源的url?

包含了一些代码以供参考。我的处理方法:

代码语言:javascript
复制
void processPacket(u_char *args, const struct pcap_pkthdr* header, const u_char *packet) {
    const struct ip_hdr *ip;
    const struct eth_hdr * eth;
    char* src;
    char* dst;
    char src_host[NI_MAXHOST];
    char dst_host[NI_MAXHOST];
    eth = (struct eth_hdr*)(packet);
    ip = (struct ip_hdr*)(packet+SIZE_ETHERNET);
    src = inet_ntoa(ip->ip_src);
    dst = inet_ntoa(ip->ip_dst);
    memset(src_host, 0, NI_MAXHOST);
    memset(dst_host, 0, NI_MAXHOST);

    getDNS(inet_ntoa(ip->ip_src), src_host);
    getDNS(inet_ntoa(ip->ip_dst), dst_host);
    printf("Eth Dest Host: %s\n", eth->eth_destHost);
    printf("Eth Send Host: %s\n", eth->eth_sendHost);
    printf("Source: IP: %s Host: %s\n", inet_ntoa(ip->ip_src), src_host);
    printf("Destination: IP: %s Host: %s\n", inet_ntoa(ip->ip_dst), dst_host);
}

下面是我的收集方法

代码语言:javascript
复制
int collect(pcap_t *handler, char* device, char* conditions) {
    struct pcap_pkthdr pkthdr;
    const unsigned char *packet = NULL;
    char* args = (char*)malloc(32);
    int count = 0;
    char errbuf[PCAP_ERRBUF_SIZE];
    bpf_u_int32 netaddr = 0, mask=0;

    //prepping conditions for collection
    memset(errbuf, 0, PCAP_ERRBUF_SIZE);

    if (device == NULL) {
        printf("Error device not found exiting...");
        return -1;
    }

    //stores network address and mask in netaddr and mask, exits if not found
    if (pcap_lookupnet(device, &netaddr, &mask, errbuf) == -1) {
            printf("Error net address and mask not found exiting...");
            return -1;
    }

    //opens the session allowing all net traffic to be read, exits if it cannot
    handler = pcap_open_live(device, MAXBYTES2CAPTURE, 1, 512, errbuf);
    if (pcap_lookupnet(device, &netaddr, &mask, errbuf) == -1) {
            printf("Error opening session exiting...");
        return -1;
    }
    if (conditions != NULL) {
        printf("Implementing Filter...\n");
        if (startFilter(conditions, handler, mask) == -1) {
                printf("Error initializing Filter");
                return -1;
        }
    }

    //executing collection
    printf("Starting loop...\n");
    pcap_loop(handler, -1, processPacket, (u_char*)&count);
    return -1;
}
EN

回答 1

Stack Overflow用户

发布于 2014-06-02 12:32:03

例如,我将运行我的代码并看到源IP,然后谷歌例如我将看到74.125.226.163和lga15s45-in-f3.1e100.net,而不是google.com。

你所要求的是不可能的。IP地址的反向DNS查找必须与最初在正向DNS查找中使用的域名匹配才能获得有问题的IP地址,这一点没有规定:

这是因为出于负载平衡和地理分布的原因,google.com可能会解析为大量的IP地址。因此,从域名到IP地址是一对多的关系。

然而,这些IP地址中的每一个(绑定到特定的its服务器或负载均衡器)在internet上仍然具有唯一的身份,这可以通过其反向查找来证明。因此,存在(通常)从IP地址到其反向DNS查找的一对一关系。

看看这个例子:

代码语言:javascript
复制
C:\Users\Jonathon>nslookup
Default Server: 192.168.1.1
Address:  192.168.1.1

> google.com
Server:  192.168.1.1
Address:  192.168.1.1

Non-authoritative answer:
Name:    google.com
Addresses:  2607:f8b0:4009:800::1007
          173.194.46.68
          173.194.46.69
          173.194.46.70
          173.194.46.71
          173.194.46.72
          173.194.46.73
          173.194.46.78
          173.194.46.64
          173.194.46.65
          173.194.46.66
          173.194.46.67

> 173.194.46.68
Server:  192.168.1.1
Address:  192.168.1.1

Name:    ord08s11-in-f4.1e100.net
Address:  173.194.46.68

另一个例子是共享托管服务器,其中一台物理机(以及公共IP地址)用于为具有不同域名的多个网站提供服务。

举个例子:

代码语言:javascript
复制
Forward lookup of several domains:

    example-01.com  --\
    example-02.com  ------> 127.64.23.17
    example-03.com  --/

Reverse lookup:

    127.64.23.17  ----> 23-17.www.some-isp.example.com
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23987169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档