cuốn sách gpt4 ai đã làm

c - Lipipq(iptables). Làm cách nào để chuyển hướng các gói đã chụp sang địa chỉ khác bằng hàng đợi iptables?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 04:58:05 29 4
mua khóa gpt4 Nike

Tôi không biết làm thế nào để giải quyết vấn đề của tôi.

Có thể chuyển hướng các gói đã chụp bằng ipq_set_verdict() không?

Tôi muốn chuyển hướng người dùng trái phép đến trang đăng nhập.

Vui lòng xem mã của tôi:

Gói được chấp nhận và trình duyệt của tôi mở trang được yêu cầu (địa chỉ đích không thay đổi)

void main(){ struct ipq_handle* h;

if (!(h = ipq_create_handle(0, PF_INET))) {
//lỗi
return;
};

if ((ipq_set_mode(h, IPQ_COPY_PACKET, BUFSIZE)) < 0) {
// lỗi
return;
};


cấu trúc iphdr* ip_pack;
ipq_packet_msg_t* eth_pack;

__u32 ip_auth_server = inet_addr("192.168.177.1");
ký tự không dấu buf[68000];

if ((ipq_read(h, buf, BUFSIZE, 0)) < 0) {

//lỗi
return;

}


chuyển đổi (ipq_message_type(buf)) {
trường hợp NLMSG_ERROR:
//lỗi
phá vỡ;

trường hợp IPQM_PACKET:
{

eth_pack = ipq_get_packet(buf);
ip_pack = (struct iphdr*) eth_pack->tải trọng;
redirect_server_auth(ip_auth_server, ip_pack, eth_pack->packet_id, h, eth_pack->payload, eth_pack->data_len);

}


}

u_int16_t ip_checksum(u_int32_t init, const u_int8_t* buf, size_t len) {
u_int32_t tổng = init;
u_int16_t* quần short = (u_int16_t*) buf;

trong khi (len > 1) {
tổng += *quần short++;
len -= 2;
}

nếu (len == 1)
tổng += *((u_int8_t*) quần short);

trong khi (tổng >> 16)
tổng = (tổng >> 16) + (tổng & 0xFFFF);

trả lại ~ tổng;
}

u_int16_t tcp_checksum(const struct iphdr* iph, const struct tcphdr* tcph,
size_t len) {
u_int32_t cksum = 0;

cksum += (iph->saddr >> 16) & 0x0000ffff;
cksum += iph->saddr & 0x0000ffff;
cksum += (iph->daddr >> 16) & 0x0000ffff;
cksum += iph->daddr & 0x0000ffff;
cksum += htons(iph->giao thức & 0x00ff);
cksum += htons(len);
return ip_checksum(cksum, (unsigned char*) tcph, len);
}

void hand_packet(unsigned char* pkt, size_t len, __u32 dest_addr, int port_dest) {
struct iphdr* iph = (struct iphdr*) pkt;
struct tcphdr* tcph = (struct tcphdr*) (pkt + iph->ihl * 4);


iph->daddr = dest_addr;
// syslog(LOG_DEBUG, "PORT");
//syslog(LOG_DEBUG, tcph->dest); //tcph->dest = htons(80);

iph->kiểm tra = 0;
iph->check = ip_checksum(0, pkt, iph->ihl * 4);
tcph->kiểm tra = 0;
tcph->check = tcp_checksum(iph, tcph, len - (iph->ihl * 4));

}

void redirect_server_auth(__u32* ip_srv, struct iphdr* ip_pack,
gói_id dài không dấu, xử lý ipq_handle*,
unsigned char* buf, int size_buf) {

syslog(LOG_DEBUG, "ĐỔI TÊN IP VÀ GỬI GÓI CHẤP NHẬN %s", inet_ntoa(
*((struct in_addr*) & ip_pack->daddr)));


hand_packet(buf, size_buf, *ip_srv, 80);


syslog(LOG_DEBUG, "ĐỔI TÊN IP VÀ GỬI GÓI CHẤP NHẬN %s", inet_ntoa(

*((struct in_addr*) & ip_pack->daddr)));

int v = ipq_set_verdict(xử lý, packet_id, NF_ACCEPT, size_buf, buf);

nếu (v < 0) {
syslog(LOG_DEBUG, "có vấn đề");
nhật ký hệ thống(LOG_DEBUG, ipq_errstr());
}

}

Tôi rất mong nhận được sự giúp đỡ của bạn. Cảm ơn bạn đã dành thời gian.

câu trả lời hay nhất

Đầu tiên, libipq được coi là không được dùng nữa, thay vào đó hãy sử dụng libnefilter_queue.

Chà, không thể chuyển hướng các gói bằng set_verdict, theo những gì tôi nhận được, bạn chỉ có thể sử dụng các phán quyết DROP ACCEPT hoặc REJECT. Nhưng bạn có thể sử dụng nfq_set_verdict2() Sửa đổi tải trọng/tiêu đề dữ liệu Đây có vẻ là những gì bạn đang làm.

Tôi không chắc chắn 100% những gì bạn muốn làm: chuyển hướng trình duyệt đến một trang web (đăng nhập) khác nếu không được xác thực?

Nếu vậy, bạn nên đưa ra phản hồi HTTP 301 chứa vị trí xác thực thay vì sửa đổi đích gói. Trong trường hợp này bạn nên thực hiện việc này ở lớp ứng dụng.

Nhưng tôi vẫn không chắc bạn thực sự muốn làm gì, bạn có thể hiểu hệ thống của mình chính xác hơn không (làm thế nào và ai xác thực? Khi nào? Và làm cách nào để kiểm tra xem khách hàng có được xác thực không?)

Giới thiệu về c - Lipipq (iptables). Làm cách nào để chuyển hướng các gói đã chụp sang địa chỉ khác bằng hàng đợi iptables? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/2897019/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress