You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I tried to add a small piece of my own data to the PSH tcp payload, and it can be seen that the transmission was successful and the server was able to respond to the ACK message. However, the Linux kernel seems to have dropped this reply ACK message and continued to send the message I modified before.
send successfully
retransmitted
Soure Code
intpacket_callback(structnfq_q_handle*qh, structnfgenmsg*nfmsg,
structnfq_data*nfa, void*data)
{
structnfqnl_msg_packet_hdr*ph;
unsigned char*raw;
intnfp_len, status;
structpkt_buff*pktbuf;
structiphdr*iph;
structtcphdr*tcph;
uint16_tseq;
unsigned char*payload;
intplen;
uint32_tverdict=NF_ACCEPT;
uint8_tlocal_out=0;
ph=nfq_get_msg_packet_hdr(nfa);
if (!ph)
{
printf("error: cannot get nf message packet hdr\n");
returnNF_ACCEPT;
}
nfp_len=nfq_get_payload(nfa, &raw);
if (nfp_len<0)
{
printf("error: invalid payload length %d\n", nfp_len);
returnNF_ACCEPT;
}
pktbuf=pktb_alloc(AF_INET, raw, nfp_len, 0x1000);
if (!pktbuf)
{
printf("error: cannot allocate pkt buff\n");
returnNF_ACCEPT;
}
iph=nfq_ip_get_hdr(pktbuf);
if (iph->protocol!=IPPROTO_TCP)
{
pktb_free(pktbuf);
returnNF_ACCEPT;
}
status=nfq_ip_set_transport_header(pktbuf, iph);
if (status<0)
{
printf("error: cannot set transport header to pkt buff\n");
pktb_free(pktbuf);
returnNF_ACCEPT;
}
tcph=nfq_tcp_get_hdr(pktbuf);
if (!tcph)
{
printf("error: cannot get tcp hdr\n");
pktb_free(pktbuf);
returnNF_ACCEPT;
}
payload=nfq_tcp_get_payload(tcph, pktbuf);
plen=nfq_get_payload(nfa, &payload);
constchar*rep="hello server\n";
if ((local_out=nfq_get_outdev(nfa)))
{
uint32_ttcp_plen=get_tcp_payload_len(iph, tcph);
if (tcph->ack&&tcph->psh&& !tcph->fin&& !tcph->rst&&!injected)
{
printf("injected\n");
nfq_tcp_mangle_ipv4(pktbuf, 0, 0, rep, strlen(rep));
injected= true;
}
}
_print_conn_info(iph, tcph);
nfq_ip_set_checksum(iph);
returnnfq_set_verdict(qh, ntohl(ph->packet_id), verdict, pktb_len(pktbuf),
pktb_data(pktbuf));
}
The text was updated successfully, but these errors were encountered:
What I did?
I tried to add a small piece of my own data to the PSH tcp payload, and it can be seen that the transmission was successful and the server was able to respond to the ACK message. However, the Linux kernel seems to have dropped this reply ACK message and continued to send the message I modified before.
send successfully
retransmitted
Soure Code
The text was updated successfully, but these errors were encountered: