当前位置: 首页 > news >正文

揭阳市seo上词外包seo咨询顾问

揭阳市seo上词外包,seo咨询顾问,wordpress 商城站下载,app开发公司投入一,背景 通常一些偷流量、端口占用、网络负载高、socket创建释放异常等Android网络相关问题,可以通过使用tcpdump抓tcp/ip报文,来定位。但是tcpdump无进程信息,也没有APK包名信息,无法确认异常的报文来自哪些Apk或者n…

一,背景

通常一些偷流量、端口占用、网络负载高、socket创建释放异常等Android网络相关问题,可以通过使用tcpdump抓tcp/ip报文,来定位。但是tcpdump无进程信息,也没有APK包名信息,无法确认异常的报文来自哪些Apk或者native进程。本题解决tcpdump报文无法关联到哪个进程/APK的问题。

二,tcpdump

tcpdump是该类问题基本的工具。在此仅作简单介绍。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.0.1/24 -C 60 -W 15 -w /data/....

tupdump使用参数说明

tcp

ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。如果都看,则删掉这个字段

-i eth1

只抓经过接口eth1的包。可以换成其他网卡,比如rmnet0。有些手机产品,可能传统数据在rmnet0, IMS数据在rmnet8(举例)。为避免遗漏可以 -i any 表示抓取所有网卡的tcpdump。

-t

不显示时间戳

-s 0

抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包。默认不要这个参数,除非是为了导出完整应用层报文。

-c 100

只抓取100个数据包

dst port ! 22

不抓取目标端口是22的数据包

src net 192.168.0.1/24 

数据包的源网络地址为192.168.0.1/24

-w /data/netdebug/tcpdump.pcap

保存到指定位置。注意位置的selinux权限,注意不要放在/mnt等重启后会丢的位置。

-C 60 -W 15 
-C 表示count。 tcpdump将在接受到count个数据包后退出。-W与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序。

其他可以参考 :

tcpdump详解及抓取安卓数据包使用介绍 - Curtain_dusk - 博客园 (cnblogs.com)

三,strace

strace命令可以用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

针对网络问题,开机阶段在adb shell中敲如下命令:

adb root
adb shell
#mkdir /data/netdebug
#strace -p `pidof zygote64` -f -tt -e trace=network -o /data/netdebug/strace.txt

 由于zygote是所有的java世界APP的父进程,参数:

-p `pidof zygote64` -f

用来跟踪所有zygote孵化出来的应用的系统调用信息。

-tt 

用来打印时间戳

 -e trace=network

用来筛选network相关的打印,避免打印太多。

抓到的trace.txt,可以通过关键字筛选你需要的LOG,如:

4895  10:59:30.755422 sendto(71, "\32\34 \0056\r2.18.24.01971\v\"t\237\17X<L\\", 28, 0, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("221.181.97.233")}, 16) = 28
4895  10:59:33.788692 sendto(71, "\32\34 \0056\r2.18.24.01971\v\"t\237\17X<L\\", 28, 0, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("221.181.97.233")}, 16) = 28
4895  10:59:34.803777 sendto(71, "\32\34 \0056\r2.18.24.01971\v\"t\237\17X<L\\", 28, 0, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("221.181.97.233")}, 16) = 28
4905  10:59:34.830972 recvfrom(71, "\32\34 \0066\0\v,6\016223.160.207.64B\0\0\357K", 4096, 0, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("221.181.97.233")}, [16]) = 29
4895  10:59:36.833750 sendto(71, "\32\34 \0056\r2.18.24.01971\v\"t\237\17X<L\\", 28, 0, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("221.181.97.233")}, 16) = 28
4895  10:59:38.611536 sendto(71, "&\0\0\1'\1\0\0\0\0\0\0\0\0\0\0\n\2t\237\17X\21\351\246,0\1LR\0\\"..., 295, 0, {sa_family=AF_INET, sin_port=htons(30013), sin_addr=inet_addr("112.53.47.99")}, 16) = 295
4905  10:59:38.700206 recvfrom(71, "&\0\0\1\20\1\0\351\246\0\0\0\0\0\0\0\n\f\21\351\246,0\1L\\b\0\7\367\357|"..., 4096, 0, {sa_family=AF_INET, sin_port=htons(30013), sin_addr=inet_addr("112.53.47.99")}, [16]) = 272
4895  10:59:39.920103 sendto(71, "\32\34 \0056\r2.18.24.01971\v\"t\237\17X<L\\", 28, 0, {sa_family=AF_INET, sin_port=htons(8003), sin_addr=inet_addr("221.181.97.233")}, 16) = 28

时间戳左边的是进程ID,右边表示发送或接收、对方的端口以及对方的ip地址等信息。

更多关于strace的介绍,参考下面:

Linux strace命令 - ggjucheng - 博客园 (cnblogs.com)

四,netstat

strace打印用来定位有两个缺点。一个是如果系统网络吞吐率比较高,打印会比较多,甚至爆掉。另一个就是看不到应用创建socket在本地的端口。对于有些短时间创建了大量socket却并未能正常联网导致端口被占用的问题,定位不方便。strace的缺点=可以通过使用netstat命令来弥补:

adb root
adb shell
#netstat -tunpla

打印的信息如下:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program Name作为服务端
tcp        0      0 127.0.0.1:60001         0.0.0.0:*               LISTEN      3805/com.fiill.app.map
tcp        0      0 193.18.2.101:60001      0.0.0.0:*               LISTEN      491/name-server作为client
tcp        0      0 193.18.2.101:60207      193.18.2.100:60034      ESTABLISHED 2793/com.fiill.car.parking
tcp        0      0 193.18.2.101:58211      193.18.2.100:60027      ESTABLISHED 1521/com.android.car

 端口、IP、包名、PID、当前进程状态都很清晰。缺点手动netstat才会有。

五,trace脚本化

1,通过周期性保存netstat打印

针对netstat不是周期性打印的缺陷,可以通过新建脚本放到系统中运行解决。不多说,直接上代码: 

netstat_dump.sh

#! /system/bin/sh#
#adb root
#adb shell "mkdir -p /data/netdebug"
#adb push netstat_dump.sh /data/
#adb shell chmod 777 /data/netstat_dump.sh
#./data/netstat_dump.sh
#global GPATH="/data/netdebug"prepare_path(){mkdir -p $GPATH
}prepare_pathwhile true
doDUMP_FILE=$GPATH/netstat_tunpla_$(date '+%F-%H-%M-%S')echo "******BEGIN******" >> $DUMP_FILEdate '+%F-%H-%M-%S' >> $DUMP_FILEnetstat -tunpla >> $DUMP_FILEdate '+%F-%H-%M-%S' >> $DUMP_FILEecho "******END******" >> $DUMP_FILEsleep 30
done

 上述脚本是每30秒执行一次netstat, 并保存在/data/netdebug/目录下以时间戳命令的文件中。

2,其他相关命令

如果要确认一些系统配置,其他网络相关的命令还有:

sysctl -a 

busybox arp -a

busybox ip route

busybox ifconfig

加上busybox,是考虑可能系统没相关组件,某些命令敲了没结果。

3,strace创建开机运行脚本

类似地,也可以给strace脚本编译到系统中,通过init.rc启动,实现自动化。

创建一个starce_network.sh脚本,编译到/system/bin目录。

#! /system/bin/sh#
#adb root
#adb shell "mkdir -p /data/netdebug"
#global GPATH="/data/netdebug"prepare_path(){mkdir -p $GPATH
}prepare_pathstrace -p `pidof zygote64` -f -tt -e trace=network -o /data/netdebug/strace.txt

在init.rc里面声明:

service starce_network /system/bin/starce_network.shclass late_startuser rootgroup rootdisabledoneshot

备注:

1,类似地,可以增加更多的脚本,比如开机启动tcpdump。不在冗述。

2,针对native世界,则 strace -p `pidof zygote64` -f 覆盖不到。 可以创建多个实例,通过如

-p `pidof surfaceflinger`

穷举的方式来dump。

六,其他

1,统计tcp连接情况

netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c

结果:
     81 ESTABLISHED
     14 LISTEN
      1 SYN_SENT
      2 TIME_WAIT

2,查看系统配置

cat /etc/sysctl.conf

如果不符合预期则修改上述文件,保存退出并

sysctl -p

使配置生效。主要,如果linux没有该文件节点,调查内核编译配置

CONFIG_DEBUG_FS

是否打开了。

3,部分网络配置说明

#tcp 检查间隔(tcp keepalive 探测包的发送),默认75
tcp_keepalive_intvl


#tcp 检查次数(如果对方不予应答,探测包的发送次数)默认 9
tcp_keepalive_probes

#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_synack_retries=2

#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_orphan_retries=3

#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout=30

#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 4096

#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
 
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1

#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
 
##减少超时前的探测次数
net.ipv4.tcp_keepalive_probes=5

#优化网络设备接收队列
net.core.netdev_max_backlog=3000

#表示系统同时保持 TIME_WAIT 的最大值,如果超过这个值,TIME_WAIT 会被立刻清除并打印警告信息。
net.ipv4.tcp_max_tw_buckets=2500

#表示用于向外连接的端口范围。默认情况是32768 61000。注意不要将最低值设得太低,否则可能会占用正常的端口。
net.ipv4.ip_local_port_range=10000 65000

4, android运行在QNX中

如果android运行在QNX中,QNX的网络状况也要拿来做参考:
cat vm/images/linux-la.config
arp -a
netstat -r
route show
netstat -as
netstat -im
sysctl -a

tracelogger -r -s3 -b1024 -k4096 -w -f/xxx.kev
slog2info -b io_pkt_v6_hc -b iopkt -W >/iopkt_slog.log
tcpdump -i vp0 -n -ee -vv -w /qnx.pcap -s 0 &

#For dumper to create a core file, you must start io-pkt with "-S".

pidin  | grep io-pkt
dumper -p <pid of io-pkt>

http://www.dt0577.cn/news/17275.html

相关文章:

  • 江苏省住房和城乡建设局合肥百度seo代理
  • 罗湖平台网站建设费用网站建设及网站推广
  • c web怎么做网站国内十大搜索引擎排名
  • 聊城做网站多少钱谷歌竞价推广教程
  • 南京网站设计制作公司排名软件培训机构哪家好
  • 国外做网站被动收入app推广渠道有哪些
  • 台湾大陆最新军事消息专业搜索引擎seo服务
  • 文化网站建设十大管理培训课程
  • 中英文切换的网站怎么做seo推广顾问
  • 今傲网站做的怎么样网站建设情况
  • wordpress关键词内链图片百度seo搜索引擎优化
  • 销售的产品是帮别人做网站如何制作一个自己的网页
  • 网站建设要那些东西营销策略都有哪些
  • 中山建设银行招聘网站网络优化工资一般多少
  • ps做网站原形交换链接的方法
  • 利用wix建手机网站百度账户托管
  • 网站开发相关技术发展律师网络推广
  • 律师事务所网站建设2022年度最火关键词
  • 网站开发西安三只松鼠网络营销策划书
  • 网站如何做会员通用宁波网络营销推广公司
  • 百度api开放平台seo优化服务商
  • 漳州 外贸网站建设 SEO推广竞价的公司有哪些
  • 网站备案 密码找回网站广告收费标准
  • 在线seo诊断东莞优化排名推广
  • 如何建立网站自己做站长优化电脑的软件有哪些
  • 企业网站模板用哪个天津百度搜索排名优化
  • 做搜狗网站优化点击上海网站seo排名优化
  • 成都网站建设策划seo排名优化北京
  • 网站建设需要什么基础吉林seo刷关键词排名优化
  • web中英文网站怎么做湖南seo优化