【问题标题】:Python- Split out src IP, src Port, dest IP, dest Port and create a dictionaryPython-拆分出src IP,src Port,dest IP,dest Port并创建字典
【发布时间】:2014-10-23 01:45:15
【问题描述】:

所以我打开了我的文件并使用 readlines() 模块将每一行拆分为一个列表,但我试图从 readlines() 中获取每个源 IP、src 端口、dest IP 和 dest 端口。基本上我被要求做的是:“打开提供的转储文件并为 src 和 dest IP 以及 src 和 dest 端口拆分每一行”。此外,“创建一个名为 Hosts 的字典;主机的键将是从文件中解析的 IP(src 和 dest)。每个键的值将是一个双元素列表,其中第一项将是 IP 的多少倍是源,秒是 IP 是目标的次数”。

这是解析文件的一部分...

08:43:56.558781 IP 192.168.233.128.56779 > 50.116.53.73.80: Flags [S], seq 3055452145, win    29200, options [mss 1460,sackOK,TS val 82505 ecr 0,nop,wscale 10], length 0
08:43:56.592590 IP 50.116.53.73.80 > 192.168.233.128.56779: Flags [S.], seq 1586785220, ack 3055452146, win 64240, options [mss 1460], length 0
08:43:56.592688 IP 192.168.233.128.56779 > 50.116.53.73.80: Flags [.], ack 1, win 29200, length 0
08:43:56.700460 IP 192.168.233.128.56779 > 50.116.53.73.80: Flags [P.], seq 1:300, ack 1, win 29200, length 299
08:43:56.701082 IP 50.116.53.73.80 > 192.168.233.128.56779: Flags [.], ack 300, win 64240, length 0
08:43:57.034951 IP 50.116.53.73.80 > 192.168.233.128.56779: Flags [P.], seq 1:1395, ack 300, win 64240, length 1394
08:43:57.034976 IP 192.168.233.128.56779 > 50.116.53.73.80: Flags [.], ack 1395, win 32062, length 0
08:43:57.118796 IP 192.168.233.128.56780 > 50.116.53.73.80: Flags [S], seq 3778524509, win 29200, options [mss 1460,sackOK,TS val 82645 ecr 0,nop,wscale 10], length 0

仅供参考,文件格式如下:

IP (source.Sourceport) > (dest.Destport)

这是我目前所拥有的:

import os

while True:
try:
    f = open(os.path.expanduser("~/Documents/Pys/ascii_dump.txt"))
    print ("It Opened!")
    break
except:
    print ("Cannot Open!")
    break

lines = f.readlines()

更新 现在我正在寻找将一个字符的str(一行)拆分为另一个字符的最佳方法。所以说把它从一个“:”拆分到下一个“:”。

【问题讨论】:

  • 对,所以尝试添加一些代码来解析这些行。或聘请开发人员。
  • 好吧,最后一行对你没有任何好处; readlines() 不会“拆分每一行”,它只是将所有这些行原样复制到一个列表中,这并不比您已经拥有的可迭代对象(文件)好。同时,您还没有编写任何迭代行、拆分每一行或解析您拆分的部分的尝试。所以,您只是要求我们为您完成任务。
  • 如果您需要一些提示才能开始:文件中的每一行都是一个str;您只需使用一两个标准 str methods 即可完成所有拆分和解析。或者您可以使用正则表达式使其更紧凑,但如果您不知道那是什么,请不要担心。如果您尝试任何一种方式并陷入困境,那么您将在 SO 上提出一个很好的问题。
  • 非常感谢约翰!我会考虑的!
  • 这里的问题是我真的不知道该去哪里。我知道我可以使用 for 循环遍历文件,但它只是在 IP 上拆分。因此,也许我可以将 IP 的开头到 IP 的结尾拆分为任何章程编号,并对端口执行相同的操作。如果这有任何意义。

标签: python file text dictionary split


【解决方案1】:

我觉得你需要看一下字符串的拆分方法

f = open('data.txt', 'r')
lines = f.read()
lines = lines.split("\n")
print(lines)
for line in lines:
    line = line.split()
    if len(line) > 0:
        srcIp = line[2]
        dstIp = line[4]
        print(srcIp.split('.'),dstIp.split('.'))

给予:

['192', '168', '233', '128', '56779'] ['50', '116', '53', '73', '80:']
['50', '116', '53', '73', '80'] ['192', '168', '233', '128', '56779:']
['192', '168', '233', '128', '56779'] ['50', '116', '53', '73', '80:']
['192', '168', '233', '128', '56779'] ['50', '116', '53', '73', '80:']
['50', '116', '53', '73', '80'] ['192', '168', '233', '128', '56779:']
['50', '116', '53', '73', '80'] ['192', '168', '233', '128', '56779:']
['192', '168', '233', '128', '56779'] ['50', '116', '53', '73', '80:']
['192', '168', '233', '128', '56780'] ['50', '116', '53', '73', '80:']

【讨论】:

  • @user3002598,我的回答有问题吗?
  • 不,你的回答很好。我只是有一段时间没有访问 Stack。完成了问题,一切都很好。谢谢!
猜你喜欢
  • 2011-03-14
  • 2011-01-24
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 2011-05-22
  • 2017-01-10
相关资源
最近更新 更多