一、nginx后端负载服务器的API在获取客户端IP时始终只能获取nginx的代理服务器IP,排查nginx配置如下

upstream sms-resp {
server 192.168.5.216:;
server 192.168.5.217:;
} server {
listen ;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
#root html;
#index index.html index.htm;
proxy_pass http://sms-resp;
proxy_set_header host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
}

nginx配置项已经配置了转换真实客户端IP的参数设置,那么需要抓包来看看是否是真正的转换了客户端IP。

二、安装tcpdump抓包工具

在nginx和后端API服务器上分别安装tcpdump

[root@push-- ~]# yum install -y tcpdump

三、使用tcpdump抓包

在172.28.146.109上浏览器调用172.28.5.215的nginx代理的HTTP接口,nginx将请求分发到172.28.5.216上,这里nginx和后端API均配置双网卡(172.28.5.215\182.168.5.215\172.28.5.216\192.168.5.216),他们之间走的192.168网段。

在172.28.5.215的80端口上抓取从172.28.146.109过来的TCP包,同时nginx会将请求转发到192.168.5.216的8501端口上,同时也在172.28.5.216的8501端口上上抓取从192.168.5.215上过来的tcp包

在172.28.5.215上执行

[root@push-- ~]# tcpdump -i em1 tcp port  and host 172.28.146.109 -c  -n -vvv -w /opt/nginx-215.cap
tcpdump: listening on em1, link-type EN10MB (Ethernet), capture size bytes
Got

-i:监听哪个网卡

tcp:监听哪个协议包(tcp\udp\ssh\)

port:监听端口

and host:监听指定IP地址进入的数据包(入)

dst host :监听发给指定IP地址的数据包(出)

-c:监听多少个数据包

-n:显示IP地址

-vvv:显示详细信息

-w:将监听信息输出到文件

在172.28.5.216上执行

[root@push-- ~]# tcpdump -i em2 port  and host 192.168.5.215 -c  -n -vvv -w /opt/nginx-216.cap
tcpdump: listening on em2, link-type EN10MB (Ethernet), capture size bytes
Got

然后在172.28.146.109上调用测试接口:http://172.28.5.215/sms-report?xxxxxxx=xxxxxx&xxx=xxxxxxx, 此时,在抓包的两台服务器上均显示有数据包捕获

[root@push-- ~]# tcpdump -i em1 tcp port  and host 172.28.146.109 -c  -n -vvv -w /opt/nginx-.cap
tcpdump: listening on em1, link-type EN10MB (Ethernet), capture size bytes
Got
[root@push-- ~]# tcpdump -i em2 port  and host 192.168.5.215 -c  -n -vvv -w /opt/nginx-.cap
tcpdump: listening on em2, link-type EN10MB (Ethernet), capture size bytes
Got

此时按ctrl+c中断监听,sz下载nginx-215.cap和nginx-216.cap文件到本地

四、利用wireshark工具分析数据包日志文件

打开nginx-215.cap

显示调用接口的数据包

再打开nginx-216.cap

这条数据包即为nginx转发到216的请求数据,双击打开详细信息窗口

在data字段里可以看到转发的请求数据,在下面的详细信息中开始部分即为http请求头,可以看到里面有X-real-ip和X-forwarded-for两个字段这是在nginx配置文件里配置的参数,里面存放客户端调用真实IP,显示为172.28.146.109即为真实调用http接口的客户端IP。

linux下利用tcpdump抓包工具排查nginx获取客户端真实IP实例的更多相关文章

  1. Linux下通过tcpdump抓包工具获取信息

    介绍 tcpdump是网络数据包截获分析工具.支持针对网络层.协议.主机.网络或端口的过滤.并提供and.or.not等逻辑语句帮助去除无用的信息. tcpdump - dump traffic on ...

  2. linux下使用tcpdump抓包分析tcp的三次握手

    首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...

  3. 利用tcpdump抓包工具监控TCP连接的三次握手和断开连接的四次挥手

    TCP传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在IP报文首部的源IP地址.目的IP地址, ...

  4. 【转载】linux下的usb抓包方法

    1 linux下的usb抓包方法 1.配置内核使能usb monitor: make menuconfig                   Device Drivers -->        ...

  5. linux下的usb抓包方法

    1 linux下的usb抓包方法1.配置内核使能usb monitor: make menuconfig                   Device Drivers -->        ...

  6. [转] Android利用tcpdump抓包

    原文链接:http://mysuperbaby.iteye.com/blog/902201 Android利用tcpdump抓包 博客分类: Android AndroidAccessGoHTML  ...

  7. Android利用tcpdump抓包,用wireshark分析包。

    1.前言 主要介绍在android手机上如何利用tcpdump抓包,用wireshark分析包. android tcpdump官网: http://www.androidtcpdump.com/ t ...

  8. tcpdump抓包工具

    tcpdump抓包工具 一:TCPDump介绍 ​ TcpDump可以将网络中传送的数据包的"头"完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and ...

  9. Mac 下安装Fiddler抓包工具

    需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...

随机推荐

  1. P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…

    P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…   大写祖母转数字  -64   发现dalao   #include<bits/stdc++.h> usi ...

  2. Android 多分辨率与不同语言适配

    一.适配不同国家语言 智能手机系统设置里各国语言的选项,然后我们项目里可以通过资源目录实现适配语言.我们知道工程的根目录有个res/的目录,res/下有一个资源类型的目录,其中有个values/str ...

  3. leetcode 78子集

    采用回溯法:对于例子图解执行过程如下,其中向上的分支为向下递归,向下的分支为第二次递归,因此已经push了对应的下标的值,则从根到右边连起来的路径即为组合 由于整个过程类似于二叉树的中序遍历,因此代码 ...

  4. leetcode 31下一个排列

    /** 验证一般情况(元素数目大于等于3)有几个情况分析:两个特殊情况: 6 5 4 3 2 1 完全反序,这种序列没有下一个排序,因此重新排序1 2 3 4 5 6 1 2 3 4 5 6 完全升序 ...

  5. 【flask】使用pipenv管理依赖环境

    [前堤] 已经安装了pipenv环境,并且项目目录下存在pipfile 如果要在另一个开发环境做开发,则将代码和Pipfile复制过去,运行以下命令: pipenv install --dev 是否要 ...

  6. Selenium 2自动化测试实战5(模块调用)

    一.模块调用 1.创建一个目录project,并且在目录下面创建两个文件 project/ 一 pub.py L一 count.py 在pub.py文件中创建add函数. #pub.py def ad ...

  7. zabbix服务端安装

    1.安装zabbix服务(1)先rpm安装lamp环境 yum install -y httpd mysql mysql-libs php php-mysql mysql-server php-bcm ...

  8. jmeter响应数据Unicode编码转换为汉字

    2018-07-09     10:24:34 每次用jmeter做接口测试时,响应信息中文总是显示Unicode编码格式,每次都要在网上寻找这一段转换的代码,但是我发现在网上找这段代码有点麻烦,像我 ...

  9. Oracle常用操作表空间sql脚本

    --删除用户(如果用户下面有对象,需要加cascade参数) drop user zxasrs cascade; --修改表空间为离线 alter tablespace zxasrs offline; ...

  10. python__007内置函数

    本文摘自:https://docs.python.org/3/library/functions.html?highlight=built#ascii     内置功能     abs() delat ...