gpt4 book ai didi

c - tcp raw 程序中的 PCAP 函数。

转载 作者:可可西里 更新时间:2023-11-01 02:47:22 25 4
gpt4 key购买 nike

我遇到了一些无法正确编译的函数的问题。它们几乎是从示例程序中借用的,以便更好地理解网络编程的工作原理,并查看我是否可以使用 RAW 套接字建立可靠的 TCP 连接(3 次握手)。这些是函数:

void recieve(u_char *args, const struct pcap_pkthdr *pkthdr, const u_char *buffer)

{

const int one = 1;

u_char *ptr;

int LEN = args; /* FIRST WARNING POINTS HERE */

struct ipheader *ip;

struct tcpheader *tcp;



ip = (struct ipheader *)(buffer + LEN);

tcp = (struct tcpheader *)(buffer + LEN + sizeof (struct ipheader));



printf("%d\n", LEN);



printf("Packet recieved. ACK number: %d\n", ntohl (tcp->tcph_seqnum));

printf("Packet recieved. SEQ number: %d\n", nthol (tcp->tcph_acknum));

s_seq = nthol (tcp->tcph_seqnum);



send_syn_ack(s_seq, dip, sip, dport, sport);



sleep(100);

}

void capture()

{

pcap_t *pd;

bpf_u_int32 netmask;

bpf_u_int32 localnet;

char *filter = ("ip dest host %s", dstip); /* SECOND WARNING POINTS HERE */

char *dev = NULL;

char errbuf[PCAP_ERRBUF_SIZE];

struct bpf_program filterprog;

int dl = 0, dl_len = 0;



if ((pd = pcap_open_live(dev, 1514, 1, 500, errbuf)) == NULL)
{

fprintf(stderr, "cannot open device %s: %s\n", dev, errbuf);

exit(1);

}



pcap_lookupnet(dev, &localnet, &netmask, errbuf);

pcap_compile(pd, &filterprog, filter, 0, localnet);

if (pcap_setfilter(pd, &filterprog) == - 1)

{

fprintf(stderr, "cannot set pcap filter %s: %s\n", filter, errbuf);

exit(1);

}



pcap_freecode(&filterprog);

dl = pcap_datalink(pd);



switch(dl) {

case 1:

dl_len = 14;

break;

default:

dl_len = 14;

break;

}



if (pcap_loop(pd, -1, recieve, (u_char *)dl_len) < 0) { /* LAST WARNING HERE */

fprintf(stderr, "cannot get raw packet: %s\n", pcap_geterr(pd));

exit(1);

}

}

这些是错误信息:

In function ‘recieve’:
warning: initialization makes integer from pointer without a cast
In function ‘capture’:
warning: initialization makes pointer from integer without a cast
Warning: cast to pointer from integer of different size

即使在示例程序中,我也会收到第一个也是最后一个警告。这两个函数有什么用吗?是否有更简单、更清晰的方法来实现它们的目的?如果没有,我应该怎么做才能摆脱这些警告?谢谢:)

最佳答案

u_char 不是标准类型。等效的是 uint8_t,它是 C99 标准的一部分。大致第一个错误请尝试,

int LEN = *参数

uint8_t 在库 stdint.h 中定义

在第二个错误的地方,进行如下操作,

`char *s = "ip dest host";

char *filter = (char *)malloc(strlen(s) + strlen(dstip) + 1);
strcpy(filter,s);
strcat(filter,dstip);'

请包括字符串函数 strlen、strcpy 和 strcat。

关于c - tcp raw 程序中的 PCAP 函数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com