apache取得客户端ip

今天修改下so,搞ip,找了半天,发现了request_rec结构体里面有,记录下。

struct request_rec { 
    pool *pool; 
    conn_rec *connection; 
    server_rec *server; 
    request_rec *next; 
    request_rec *prev; 
    request_rec *main; 
    char *the_request; 
    int assbackwards; 
    enum proxyreqtype proxyreq; 
    int header_only; 
    char *protocol; 
    int proto_num; 
    char *hostname; 
    time_t request_time; 
    const char *status_line; 
    int status; 
    const char *method; 
    int method_number; 
    int allowed; 
    int sent_bodyct; 
    long bytes_sent; 
    time_t mtime; 
    int chunked; 
    int byterange; 
    char *boundary; 
    const char *range; 
    long clength; 
    long remaining; 
    long read_length; 
    int read_body; 
    int read_chunked; 
    unsigned expecting_100; 
    table *headers_in; 
    table *headers_out; 
    table *err_headers_out; 
    table *subprocess_env; 
    table *notes; 
    const char *content_type; 
    const char *handler; 
    const char *content_encoding; 
    const char *content_language; 
    array_header *content_languages; 
    char *vlist_validator; 
    int no_cache; 
    int no_local_copy; 
    char *unparsed_uri; 
    char *uri; 
    char *filename; 
    char *path_info; 
    char *args; 
    struct stat finfo; 
    uri_components parsed_uri; 
    void *per_dir_config; 
    void *request_config; 
    const struct htaccess_result *htaccess; 
    char *case_preserved_filename; 
};
typedef struct conn_rec conn_rec; 
struct conn_rec { 
    pool *pool; 
    server_rec *server; 
    server_rec *base_server; 
    void *vhost_lookup_data; 
    int child_num; 
    BUFF *client; 
    struct sockaddr_in local_addr; 
    struct sockaddr_in remote_addr; 
    char *remote_ip; 
    char *remote_host; 
    char *remote_logname; 
    char *user; 
    char *ap_auth_type; 
    unsigned aborted:1; 
    signed int keepalive:2; 
    unsigned keptalive:1; 
    signed int double_reverse:2; 
    int keepalives; 
    char *local_ip; 
    char *local_host; 
};
想打印出来看下,直接用
fprintf(stderr,"%s/n",r->connection->remote_ip);
打印到apache的日志中,日志中竟然没有记录,只好单独打印到一个文件中看下了。尴尬
 
Apache SSHD 客户端监听器(ClientSessionListener)是一个接口,它可以用来监听客户端会话(session)的状态和事件。当客户端与服务器建立连接并创建会话时,可以注册一个或多个监听器来监听该会话的状态变化,从而在会话状态发生变化时执行相应的操作。 下面是一些常见的客户端会话状态变化事件: - sessionCreated: 当客户端会话被创建时触发该事件。 - sessionClosed: 当客户端会话被关闭时触发该事件。 - authSucceeded: 当客户端成功进行身份验证时触发该事件。 - authFailed: 当客户端身份验证失败时触发该事件。 - channelCreated: 当客户端创建一个新的通道(channel)时触发该事件。 - channelClosed: 当客户端关闭一个通道时触发该事件。 通过实现 ClientSessionListener 接口,可以监听这些事件并执行相应的操作。例如,当客户端会话被创建时,可以在控制台上输出一条消息,如下所示: ```java public class MyClientSessionListener implements ClientSessionListener { @Override public void sessionCreated(ClientSession session) { System.out.println("Client session created: " + session); } // 省略其他方法 } ``` 然后在客户端连接服务器时,将该监听器注册到会话中: ```java public class MySshClient { public static void main(String[] args) throws Exception { SshClient client = SshClient.setUpDefaultClient(); client.start(); try (ClientSession session = client.connect("localhost", 22).verify().getSession()) { session.addSessionListener(new MyClientSessionListener()); session.authPassword("username", "password"); // 执行其他操作 } client.stop(); } } ``` 在上面的示例中,当客户端会话被创建时,会在控制台上输出一条消息。你可以根据实际需求扩展 MyClientSessionListener 类,以便在会话状态发生变化时执行其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值