毕设
#include <iostream>
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "arpa/inet.h"
#include "pcap.h"
#include "libnet.h"
#include "netinet/ip.h"
#include "netinet/tcp.h"
#include "netinet/ether.h"
using namespace std;
#define HTTP_REQUEST "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
void usage() {
printf("Usage: ./http_request <interface>\n");
}
uint32_t ack=0;
void packet_handler(u_char *param,const pcap_pkthdr *header,const u_char *pkt_data){
// uint8_t *payload;
// uint32_t payload_size;
//
// payload=nullptr;
// payload_size=0;
// libnet_ptag_t ip_tag=0,tcp_tag=0;
// char*dst_ip_str="10.11.250.175";
// char*src_ip_str="192.168.255.128";
// //char*src_ip_str="10.99.93.229";
// uint32_t src_ip=0,dst_ip=0;
// src_ip=libnet_name2addr4(net,src_ip_str,LIBNET_RESOLVE);
// dst_ip = libnet_name2addr4(net, dst_ip_str, LIBNET_RESOLVE);
// cout<<*pkt_data<<endl;
iphdr* ip_hdr;tcphdr* tcp_hdr;uint ip_hdr_len;
ip_hdr = (iphdr *) (pkt_data + sizeof(ether_header));
printf("ether header len:%d\n", sizeof(ether_header));
ip_hdr_len=ip_hdr->ihl*4;
printf("ip len:%d", ip_hdr_len);
tcp_hdr = (tcphdr *) (pkt_data + sizeof(ether_header) + ip_hdr_len);
printf("ack:%x",tcp_hdr->th_seq);
if (tcp_hdr->th_flags & TH_ACK) {
ack= ntohl(tcp_hdr->th_seq) ;
// printf("ack:%x,%u",ack,ack);
// tcp_tag = libnet_build_tcp(12345, 80, 1112,ack+1, TH_ACK, 14600, 0, 0, LIBNET_TCP_H + payload_size, payload,
// payload_size, net, 0);
// ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + payload_size, 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
// payload, payload_size, net, 0);
// //usleep(7500);
// libnet_write(net);
}
}
int main(int argc,char**argv) {
system("iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP");
int n=5;
char c[n];
libnet_t *net=libnet_init(LIBNET_RAW4,"eth0", nullptr);
if(argc!=2){
usage();
return 1;
}char errbuf[PCAP_ERRBUF_SIZE];
if(net==NULL){
fprintf(stderr, "failed to init libnet%s\n", libnet_geterror(net));
return 1;
}
// char payload_str[9999]="GET/HTTP/1.1\n"
// "Host: yjszsxsb.zstu.edu.cn\n"
// "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0\n"
// "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n"
// "Accept-Language: en-US,en;q=0.5\n"
// "Accept-Encoding: gzip, deflate\n"
// "Connection: keep-alive\n"
// "Upgrade-Insecure-Requests: 1";
char payload_str[999]="GET/HTTP/1.1\r\n"
"Host: yjszsxsb.zstu.edu.cn\r\n\r\n";
uint8_t *payload=(uint8_t *)payload_str;
uint32_t payload_size = strlen(payload_str);
cout<<"pay size:"<<payload_size<<endl;
// payload=nullptr;
// payload_size=0;
// payload_size=strlen(HTTP_REQUEST);
// payload=(uint8_t*)HTTP_REQUEST;
libnet_ptag_t ip_tag=0,tcp_tag=0;
char*dst_ip_str="10.11.250.175";
char*src_ip_str="192.168.255.128";
//char*src_ip_str="10.99.93.229";
uint32_t src_ip=0,dst_ip=0;
src_ip=libnet_name2addr4(net,src_ip_str,LIBNET_RESOLVE);
dst_ip = libnet_name2addr4(net, dst_ip_str, LIBNET_RESOLVE);
//http://rscehr.zstu.edu.cn:8888/templates/index/hcmlogon.jsp;jsessionid=193E694BC96FF533291306172488CED4
//libnet_ptag_t tcp_opt_tag=libnet_build_tcp_options(payload,payload_size,net,0);
//----------==========--rst
// tcp_tag = libnet_build_tcp(12346, 80,0, 0, TH_RST, 14600, 0, 0, LIBNET_TCP_H + payload_size, payload,
// payload_size, net, 0);
// ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + payload_size, 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
// nullptr, 0, net, 0);
// libnet_write(net);
tcp_tag = libnet_build_tcp(12348, 80,1, 0, TH_SYN, 14600, 0, 0, LIBNET_TCP_H , nullptr,
0, net, 0);
ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H , 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
nullptr, 0, net, 0);
/*pcap_t *pcap = pcap_open_live(argv[1], 65535, 1, 1000, errbuf);
pcap_t*desc;bpf_u_int32 network,mask;bpf_program fp;
pcap_lookupnet("eth0",&network,&mask,errbuf);
pcap_compile(pcap, &fp, "tcp", 0, network);
pcap_setfilter(pcap,&fp);
pcap_dumper_t *dumper = pcap_dump_open(pcap, "http_response.pcap");
if(dumper==NULL){
fprintf(stderr, "failed to open pcap dump file:%s\n", pcap_geterr(pcap));
pcap_close(pcap);
libnet_destroy(net);return 1;
}*/
/* pcap_pkthdr header;
const u_char *packet;
pcap_pkthdr*hdr;*/
pcap_t*desc;char err[PCAP_ERRBUF_SIZE];
bpf_program fp;bpf_u_int32 network,mask;
desc = pcap_open_live("eth0", BUFSIZ, 0, 10, nullptr);
pcap_lookupnet("eth0", &network, &mask, nullptr);
pcap_compile(desc, &fp, "tcp and src host 10.11.250.175 and src port 80", 0, network);
pcap_setfilter(desc,&fp);
int bytes_sent = libnet_write(net);
//pcap
pcap_dispatch(desc, 1, packet_handler, NULL);
//cout<<"ack:"<<ack;
//-----second packet sent;
net=libnet_init(LIBNET_RAW4,"eth0", nullptr);
tcp_tag = libnet_build_tcp(12348, 80, 2,ack+1, TH_ACK|TH_PUSH, 14600, 0, 0, LIBNET_TCP_H , payload,
payload_size, net, 0);
ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H , 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
nullptr, 0, net, 0);
//usleep(7500);
bytes_sent= libnet_write(net);
cout<<"\nsend len:"<<bytes_sent;
net=libnet_init(LIBNET_RAW4,"eth0", nullptr);
/*char* payload= "hello";uint32_t payload_size= sizeof(payload);*/
// char payload_str[9999]="GET / HTTP/1.1\n"
// "Host: yjszsxsb.zstu.edu.cn\n"
// "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0\n"
// "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n"
// "Accept-Language: en-US,en;q=0.5\n"
// "Accept-Encoding: gzip, deflate\n"
// "Connection: keep-alive\n"
// "Upgrade-Insecure-Requests: 1";
// uint8_t *payload=(uint8_t *)payload_str;
// uint32_t payload_size = strlen(payload_str)+1;
// char*dst_ip_str="10.11.250.175";
// char*src_ip_str="192.168.255.128";
// //char*src_ip_str="10.99.93.229";
// uint32_t src_ip=0,dst_ip=0;
// src_ip=libnet_name2addr4(net,src_ip_str,LIBNET_RESOLVE);
// dst_ip = libnet_name2addr4(net, dst_ip_str, LIBNET_RESOLVE);
//=======push request
// tcp_tag = libnet_build_tcp(12343, 80,3, ack+1, TH_PUSH|TH_ACK, 14600, 0, 0, LIBNET_TCP_H + payload_size, (uint8_t *)payload,
// payload_size, net, 0);
// if (tcp_tag == -1) {
// fprintf(stderr, "libnet_build_tcp() failed: %s\n", libnet_geterror(net));
//
// }
// ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + payload_size, 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
// nullptr, 0, net, 0);
// if (ip_tag == -1) {
// fprintf(stderr, "libnet_build_ipv4() failed: %s\n", libnet_geterror(net));
//
// }
// bytes_sent = libnet_write(net);
//send raw http;failed
// pcap_t*handle;pcap_pkthdr header;
// u_char *packet;
// handle = pcap_open_offline("/home/get.pcapng", nullptr);
// packet = const_cast<u_char *>(pcap_next(handle, &header));
// u_int32_t length;
// length=header.len;
// libnet_write_raw_ipv4(net, packet, length);
// while ((packet=pcap_next(pcap,&header))!=NULL){
// pcap_dump((u_char *) dumper, &header, packet);
// }
// pcap_dump_close(dumper);
// pcap_close(pcap);
// libnet_destroy(net);
// printf("success");
}
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "arpa/inet.h"
#include "pcap.h"
#include "libnet.h"
#include "netinet/ip.h"
#include "netinet/tcp.h"
#include "netinet/ether.h"
using namespace std;
#define HTTP_REQUEST "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
void usage() {
printf("Usage: ./http_request <interface>\n");
}
uint32_t ack=0;
void packet_handler(u_char *param,const pcap_pkthdr *header,const u_char *pkt_data){
// uint8_t *payload;
// uint32_t payload_size;
//
// payload=nullptr;
// payload_size=0;
// libnet_ptag_t ip_tag=0,tcp_tag=0;
// char*dst_ip_str="10.11.250.175";
// char*src_ip_str="192.168.255.128";
// //char*src_ip_str="10.99.93.229";
// uint32_t src_ip=0,dst_ip=0;
// src_ip=libnet_name2addr4(net,src_ip_str,LIBNET_RESOLVE);
// dst_ip = libnet_name2addr4(net, dst_ip_str, LIBNET_RESOLVE);
// cout<<*pkt_data<<endl;
iphdr* ip_hdr;tcphdr* tcp_hdr;uint ip_hdr_len;
ip_hdr = (iphdr *) (pkt_data + sizeof(ether_header));
printf("ether header len:%d\n", sizeof(ether_header));
ip_hdr_len=ip_hdr->ihl*4;
printf("ip len:%d", ip_hdr_len);
tcp_hdr = (tcphdr *) (pkt_data + sizeof(ether_header) + ip_hdr_len);
printf("ack:%x",tcp_hdr->th_seq);
if (tcp_hdr->th_flags & TH_ACK) {
ack= ntohl(tcp_hdr->th_seq) ;
// printf("ack:%x,%u",ack,ack);
// tcp_tag = libnet_build_tcp(12345, 80, 1112,ack+1, TH_ACK, 14600, 0, 0, LIBNET_TCP_H + payload_size, payload,
// payload_size, net, 0);
// ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + payload_size, 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
// payload, payload_size, net, 0);
// //usleep(7500);
// libnet_write(net);
}
}
int main(int argc,char**argv) {
system("iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP");
int n=5;
char c[n];
libnet_t *net=libnet_init(LIBNET_RAW4,"eth0", nullptr);
if(argc!=2){
usage();
return 1;
}char errbuf[PCAP_ERRBUF_SIZE];
if(net==NULL){
fprintf(stderr, "failed to init libnet%s\n", libnet_geterror(net));
return 1;
}
// char payload_str[9999]="GET/HTTP/1.1\n"
// "Host: yjszsxsb.zstu.edu.cn\n"
// "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0\n"
// "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n"
// "Accept-Language: en-US,en;q=0.5\n"
// "Accept-Encoding: gzip, deflate\n"
// "Connection: keep-alive\n"
// "Upgrade-Insecure-Requests: 1";
char payload_str[999]="GET/HTTP/1.1\r\n"
"Host: yjszsxsb.zstu.edu.cn\r\n\r\n";
uint8_t *payload=(uint8_t *)payload_str;
uint32_t payload_size = strlen(payload_str);
cout<<"pay size:"<<payload_size<<endl;
// payload=nullptr;
// payload_size=0;
// payload_size=strlen(HTTP_REQUEST);
// payload=(uint8_t*)HTTP_REQUEST;
libnet_ptag_t ip_tag=0,tcp_tag=0;
char*dst_ip_str="10.11.250.175";
char*src_ip_str="192.168.255.128";
//char*src_ip_str="10.99.93.229";
uint32_t src_ip=0,dst_ip=0;
src_ip=libnet_name2addr4(net,src_ip_str,LIBNET_RESOLVE);
dst_ip = libnet_name2addr4(net, dst_ip_str, LIBNET_RESOLVE);
//http://rscehr.zstu.edu.cn:8888/templates/index/hcmlogon.jsp;jsessionid=193E694BC96FF533291306172488CED4
//libnet_ptag_t tcp_opt_tag=libnet_build_tcp_options(payload,payload_size,net,0);
//----------==========--rst
// tcp_tag = libnet_build_tcp(12346, 80,0, 0, TH_RST, 14600, 0, 0, LIBNET_TCP_H + payload_size, payload,
// payload_size, net, 0);
// ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + payload_size, 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
// nullptr, 0, net, 0);
// libnet_write(net);
tcp_tag = libnet_build_tcp(12348, 80,1, 0, TH_SYN, 14600, 0, 0, LIBNET_TCP_H , nullptr,
0, net, 0);
ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H , 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
nullptr, 0, net, 0);
/*pcap_t *pcap = pcap_open_live(argv[1], 65535, 1, 1000, errbuf);
pcap_t*desc;bpf_u_int32 network,mask;bpf_program fp;
pcap_lookupnet("eth0",&network,&mask,errbuf);
pcap_compile(pcap, &fp, "tcp", 0, network);
pcap_setfilter(pcap,&fp);
pcap_dumper_t *dumper = pcap_dump_open(pcap, "http_response.pcap");
if(dumper==NULL){
fprintf(stderr, "failed to open pcap dump file:%s\n", pcap_geterr(pcap));
pcap_close(pcap);
libnet_destroy(net);return 1;
}*/
/* pcap_pkthdr header;
const u_char *packet;
pcap_pkthdr*hdr;*/
pcap_t*desc;char err[PCAP_ERRBUF_SIZE];
bpf_program fp;bpf_u_int32 network,mask;
desc = pcap_open_live("eth0", BUFSIZ, 0, 10, nullptr);
pcap_lookupnet("eth0", &network, &mask, nullptr);
pcap_compile(desc, &fp, "tcp and src host 10.11.250.175 and src port 80", 0, network);
pcap_setfilter(desc,&fp);
int bytes_sent = libnet_write(net);
//pcap
pcap_dispatch(desc, 1, packet_handler, NULL);
//cout<<"ack:"<<ack;
//-----second packet sent;
net=libnet_init(LIBNET_RAW4,"eth0", nullptr);
tcp_tag = libnet_build_tcp(12348, 80, 2,ack+1, TH_ACK|TH_PUSH, 14600, 0, 0, LIBNET_TCP_H , payload,
payload_size, net, 0);
ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H , 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
nullptr, 0, net, 0);
//usleep(7500);
bytes_sent= libnet_write(net);
cout<<"\nsend len:"<<bytes_sent;
net=libnet_init(LIBNET_RAW4,"eth0", nullptr);
/*char* payload= "hello";uint32_t payload_size= sizeof(payload);*/
// char payload_str[9999]="GET / HTTP/1.1\n"
// "Host: yjszsxsb.zstu.edu.cn\n"
// "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0\n"
// "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n"
// "Accept-Language: en-US,en;q=0.5\n"
// "Accept-Encoding: gzip, deflate\n"
// "Connection: keep-alive\n"
// "Upgrade-Insecure-Requests: 1";
// uint8_t *payload=(uint8_t *)payload_str;
// uint32_t payload_size = strlen(payload_str)+1;
// char*dst_ip_str="10.11.250.175";
// char*src_ip_str="192.168.255.128";
// //char*src_ip_str="10.99.93.229";
// uint32_t src_ip=0,dst_ip=0;
// src_ip=libnet_name2addr4(net,src_ip_str,LIBNET_RESOLVE);
// dst_ip = libnet_name2addr4(net, dst_ip_str, LIBNET_RESOLVE);
//=======push request
// tcp_tag = libnet_build_tcp(12343, 80,3, ack+1, TH_PUSH|TH_ACK, 14600, 0, 0, LIBNET_TCP_H + payload_size, (uint8_t *)payload,
// payload_size, net, 0);
// if (tcp_tag == -1) {
// fprintf(stderr, "libnet_build_tcp() failed: %s\n", libnet_geterror(net));
//
// }
// ip_tag = libnet_build_ipv4(LIBNET_IPV4_H + LIBNET_TCP_H + payload_size, 0, 0, 0, 64, IPPROTO_TCP, 0, src_ip, dst_ip,
// nullptr, 0, net, 0);
// if (ip_tag == -1) {
// fprintf(stderr, "libnet_build_ipv4() failed: %s\n", libnet_geterror(net));
//
// }
// bytes_sent = libnet_write(net);
//send raw http;failed
// pcap_t*handle;pcap_pkthdr header;
// u_char *packet;
// handle = pcap_open_offline("/home/get.pcapng", nullptr);
// packet = const_cast<u_char *>(pcap_next(handle, &header));
// u_int32_t length;
// length=header.len;
// libnet_write_raw_ipv4(net, packet, length);
// while ((packet=pcap_next(pcap,&header))!=NULL){
// pcap_dump((u_char *) dumper, &header, packet);
// }
// pcap_dump_close(dumper);
// pcap_close(pcap);
// libnet_destroy(net);
// printf("success");
}
posted on 2023-04-28 23:27 shenhshihao 阅读(21) 评论(0) 编辑 收藏 举报